完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想使用部分SRAM3共享内存来进行A7内核和M4内核之间的数据传输。在 A7 核心上,我在 /dev/mem 上使用 mmap 将 sram 重新映射到用户空间,并将数据复制到/从 SRAM3 缓冲区。然而结果并不稳定。
在 M4 端读取数据时,有时数据似乎发生了变化。 在 M4 一侧,我确实添加了一个额外的内存区域 (RAM3_ipc_shm): 记忆 { RETRAM_interrupts (xrw):ORIGIN = 0x00000000,LENGTH = 0x00000298 FLASH_text (rx) : ORIGIN = 0x10000000, LENGTH = 128K RAM1_data (xrw) : ORIGIN = 0x10020000, LENGTH = 128K RAM2_ipc_shm (xrw) : ORIGIN = 0x10040000, LENGTH = 0x00008000 RAM3_ipc_shm (xrw) : ORIGIN = 0x10048000, LENGTH = 0x00004000 } 只需读/写这个区域,例如: 易失性 uint16_t *data_in = 0x10048000; 易失性 uint16_t *data_out = 0x1004A000; nof_write_bits = 16 * data_in[0]; // 设置输出数据 对于 (int i = 0; ..... { // DO0-DO3 & 清除数据时钟 & 清除锁存器 outputs0 = (data_in[4 + i] << 11) & DO03_mask; // D04-D05 outputs1 = (data_in[4 + i] << (14 - 4)) & DO45_mask; // 读取输入 inputs0 = (uint16_t) ((DI0_GPIO_Port->IDR & DI03_mask) >> 3); inputs1 = (uint16_t) ((DI4_GPIO_Port->IDR & DI45_mask) >> (12 - 4)); data_out[i - read_bits_offs] = inputs0 | 输入1; } A7侧: 易失性 uint8_t *the_smem_buf; 易失性 uint8_t *the_read_pos; // 映射共享内存窗口 the_mem_fd = open("/dev/mem", O_RDWR | O_SYNC); the_smem_buf = static_cast the_read_pos = the_smem_buf + 0x2000; // 向 M4 写入数据 对于 (int i = 0; i < len; i++) the_smem_buf = ((uint8_t *) pData); //从M4读取数据 memcpy(pData, (void *) the_read_pos, len); 我使用 rpmsg 机制在对 M4 内核的写入和读取之间进行同步。 观察:对于共享数据缓冲区中的前 4 个 16 位值,一切看起来都正常,但是当在较高区域中有非零数据时,数据有时会丢失或在应该为零的地方不为零。 知道这里出了什么问题吗?我是否必须将内存区域添加到设备树中?或者根本不可能通过内存映射区域进行传输?M4 端的链接描述文件中的内存映射中是否缺少某些内容? |
|
相关推荐
1个回答
|
|
我确实发现 A7 核心和 M4 与 RPMsg 之间的同步导致了问题:开始时我通过 RPMsg 发送启动命令并等待 M4 通过 RPMsg 回复,但不知何故另一条消息收到,导致同步不匹配,导致 A7 核心在 M4 完成其周期之前写入新数据。我通过在通过 RPMsg 的通信中引入序列号来修复此问题。
同步修复后,我可以删除 200us 的睡眠,一切正常。 所以吸取教训:使用 /dev/mem 上的 mmap 将 SRAM 内存映射到用户空间确实可以正常工作!不需要用于映射 SRAM 的特定驱动程序,也不需要 DT 中内存区域的规范(尽管我认为这样做是明智的,但要明确内存区域已被使用)。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2642 浏览 1 评论
3208 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1783 浏览 1 评论
3611 浏览 6 评论
5989 浏览 21 评论
939浏览 4评论
1316浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
584浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1303浏览 3评论
1361浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 22:18 , Processed in 1.123569 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号