r******s 发帖数: 925 | 1 两个不同的real time进程运行在不同的CPU上面,使用一段共享内存进行同步
内存容量足够大,我想采用的方法,就是划分块
A块属于A进程写,B只读的区域,
B块属于B进程写,A只读的区域。
由于没有使用中断,两边都是在固定的时钟周期内写自己的区域同时读对方的区域
这样编程比较简单,我想了解一下可能出现的后果,
比如,A读了B正在写的区域
那么我可以为每个块设置一个标志位,代表在写,在读,或者ready
有没有哪位大侠给出一个简单但是确保安全的办法? | t**********l 发帖数: 24 | 2 不是大侠,胡乱说一下,不对请指正。
假设用DUAL PORT RAM,两CPU不存在读写同一区 地址或数据总线冲突问题(不然要用硬
件如令牌环等裁决总线)。
假设CPU1写A区时间最长为 Tw_max
CPU2读A区时间最长为 Tr_max
CPU2读时,读三次,每次间隔Tw_max+delta, 三取二。
CPU1写时,写一次,但与上一次写应间隔至少 2(Tw+delta) + 3Tr | r******s 发帖数: 925 | 3 一看就是明白人啊,知道俺是在搞DP RAM,
我想试试标志位,每个周期内只允许一次写,写的时候锁定
理论上只要写+读的时间小于周期时间,都是可以实现的
根据我的经验估计这个时间只是周期时间的1/10或者更短
我先run一天一夜看看到底有什么错误发生。
【在 t**********l 的大作中提到】 : 不是大侠,胡乱说一下,不对请指正。 : 假设用DUAL PORT RAM,两CPU不存在读写同一区 地址或数据总线冲突问题(不然要用硬 : 件如令牌环等裁决总线)。 : 假设CPU1写A区时间最长为 Tw_max : CPU2读A区时间最长为 Tr_max : CPU2读时,读三次,每次间隔Tw_max+delta, 三取二。 : CPU1写时,写一次,但与上一次写应间隔至少 2(Tw+delta) + 3Tr
| t**********l 发帖数: 24 | 4 若有结果了,望能通报下。
【在 r******s 的大作中提到】 : 一看就是明白人啊,知道俺是在搞DP RAM, : 我想试试标志位,每个周期内只允许一次写,写的时候锁定 : 理论上只要写+读的时间小于周期时间,都是可以实现的 : 根据我的经验估计这个时间只是周期时间的1/10或者更短 : 我先run一天一夜看看到底有什么错误发生。
| r******s 发帖数: 925 | 5 结果有了,timer是记录的print的时刻,秒为单位
CPU和CPU都是1ms的时间中断,每个时间中断各自count加一次
这样两者的计数理想差值应该是恒定的,但是实际是有偏差的
同步误差在1/150000ms 到 1/1000 ms之间,没出现读写冲突问题
测试的是单个字节读写。今儿再做做block 读写
timer1: old 0, data 386
timer99: old 386, data 385
timer256: old 385, data 384
timer434: old 384, data 383
timer609: old 383, data 382
timer775: old 382, data 381
timer936: old 381, data 380
timer1095: old 380, data 379
timer1252: old 379, data 378
timer1408: old 378, data 377
timer1563: old 377, data 376
timer1719: old 376, data 375
timer187
【在 t**********l 的大作中提到】 : 若有结果了,望能通报下。
| c******a 发帖数: 600 | | r******s 发帖数: 925 | 7 感觉这个误差属于机器误差部分,是可以忍受的
这两天一直忙着修车,没进展,等block的出来了我再贴一下我的程序设计吧
【在 r******s 的大作中提到】 : 结果有了,timer是记录的print的时刻,秒为单位 : CPU和CPU都是1ms的时间中断,每个时间中断各自count加一次 : 这样两者的计数理想差值应该是恒定的,但是实际是有偏差的 : 同步误差在1/150000ms 到 1/1000 ms之间,没出现读写冲突问题 : 测试的是单个字节读写。今儿再做做block 读写 : timer1: old 0, data 386 : timer99: old 386, data 385 : timer256: old 385, data 384 : timer434: old 384, data 383 : timer609: old 383, data 382
|
|