/****************************************************************************** 版权所有: 文件名称: shm.c 文件版本: 01.01 创建作者: sunxi 创建日期: 2022-04-21 功能说明: 共享内存驱动头文件 其它说明: 修改记录: */ #ifndef _SHM_H_ #define _SHM_H_ /* noted by sunxi: 共享内存使用说明: 共享内存总大小为4M,每为读空间和写空间,各2M; 读空间为linux核向裸核读取数据的空间,linux核只读,裸核只写; 写空间为linux核向裸核写入数据的空间,linux核只写,裸核只读; 如: u8 a = SHM_BASE_R[0]; ----- linux核读取共享内存的第1个字节数据 SHM_BASE_W[0] = 0x55; ----- linux核向共享内存的第1个字节写入数据 可以用接口函数操作,shm_read 和shm_write; 也可以直接操作SHM_BASE_R和SHM_BASE_W; 注意: 因为读空间和写空间是不一样的,所以shm_read(addr=0)和shm_read(addr=0), 他们操作的空间是不一样的。 */ #define SHM_MAX_SIZE 0x200000 //共享内存的大小,读和写空间各有2M extern uint8_t *SHM_BASE_R; //共享内存---读(从裸核读取数据)---开始地址 extern uint8_t *SHM_BASE_W; //共享内存---写(向裸核写入数据)---开始地址 /****************************************************************************** 函数名称: shm_read 函数版本: 01.01 创建作者: sunxi 创建日期: 2022-04-21 函数说明: 读取共享内存的数据. 参数说明: addr:所以读取共享内存的地址 len:需要读取数据的长度 out_data:输出buf out_data_size:输出buf的长度 返回值: 成功返回读取数据的长度, 失败返回-1 修改记录: */ int shm_read(uint32_t addr, uint32_t len, uint8_t *out_data, uint32_t out_data_size); /****************************************************************************** 函数名称: shm_write 函数版本: 01.01 创建作者: sunxi 创建日期: 2022-04-21 函数说明: 向共享内存写入数据. 参数说明: addr:共享内存的地址 data:写入数据 len:写入数据长度 返回值: 成功返回写入数据的长度, 失败返回-1 修改记录: */ int shm_write(uint32_t addr, uint8_t *data, uint32_t len); /****************************************************************************** 函数名称: shm_init 函数版本: 01.01 创建作者: sunxi 创建日期: 2022-04-21 函数说明: shm初始化. 参数说明: 无 返回值: 成功返回0, 失败返回-1 修改记录: */ int shm_init(void); /****************************************************************************** 函数名称: shm_exit 函数版本: 01.01 创建作者: sunxi 创建日期: 2022-04-21 函数说明: shm反初始化. 参数说明: 无 返回值: 总是返回0. 修改记录: */ int shm_exit(void); #endif /*------------------------------ 文件结束 ------------------------------------- */