我在GPEVM上使用AM6442和MCU+ SDK v 8.02 .00.31。
我在ICSSG1的PRU0上有一个程序,它每微秒增加一个32位计数器,并使用sbco指令将此计数器值写入PRU数据RAM,该指令的长度为4字节。
在R5F内核(裸机/无RTOS)上运行的第二个程序将从位于0x3008万的PRU数据RAM连续循环读取此计数器(未与PRU同步)。
R5F保留了一个MPU区域,将PRU数据RAM区域视为强序。
我注意到R5F读取的计数器值并非总是按预期增加。 我的意思是,每次PRU增加计数器时,它会增加1,但有时R5F读取的计数器会大量跳转(6.5536万等),然后返回到预期值。 因此R5F所看到的顺序值可能类似于1,2,3,4,5,6,765536,9,10,11。
如果R5F读取的值为“错误”,则它可以通过第二次立即读取PRU DRAM (0x3008万)来获得“正确”值。
32位PRU是否是原子写入(sbco指令一次写入4个字节)? 我假设如果PRU在R5F读取的同时写入,R5F可能会得到一个过时的值,但在PRU完成写入之前,我会看到不正确的数据。 这是预料之中的吗?