关于DSP6000 CCS BOIS 的原子操作-数据保护
2008-11-17 14:27
573 查看
这方面的东西网上好象少被提起,只能从TI的pdf里面找到点东西。
1,目的,
在两个task之间保护共享数,或task与interrupt 程序的共享数据.
2,解决
查spu430d.pdf,可以有找到 ATM Moudle 是关于这类的功能:
ATM provides a set of assembly language functions that are used to manipulate variables with interrupts disabled.
These functions can therefore be used on data shared between tasks, and on data shared between tasks and interrupt routines
其函数如下:
ATM_andi, ATM_andu. AND memory and return previous value
ATM_cleari, ATM_clearu. Clear memory and return previous value
ATM_deci, ATM_decu. Decrement memory and return new value
ATM_inci, ATM_incu. Increment memory and return new value
ATM_ori, ATM_oru. OR memory and return previous value
ATM_seti, ATM_setu. Set memory and return previous value
可以实保护中对数据区进运运算,可惜能查到例子,不知道保护一个数组操作时如何实现?
另外C62 和C64 是用C6x_disableIR和C6x_enableIR可以实现对所有中断进和行屏蔽,屏蔽哪此由参数mask决定;注意这里面不不有任务睡眠,阻塞之类的操作,
.include c64.h64
...
// disable interrupts specified by IEMASK
C64_disableIER IEMASK, b0, b1
...do some critical operation`
// enable interrupts specified by IEMASK
C64_enableIER IEMASK, b0, b1
HWI_disable 和 HWI_enable 可是对hardware interrupt进行管理,同SWI moudle 一样.
如果是 在两个task之间保护共享数,可以用TSK_disable();TSK_enable();来实现,这两函数不适用于中断程序,只能是TASK1 与TASK2 之间的数据操作保护。
在要修改数据的TASK里面,做如下处理
TSK_disable();
//data opertoin;
TSK_enable();
待续...
1,目的,
在两个task之间保护共享数,或task与interrupt 程序的共享数据.
2,解决
查spu430d.pdf,可以有找到 ATM Moudle 是关于这类的功能:
ATM provides a set of assembly language functions that are used to manipulate variables with interrupts disabled.
These functions can therefore be used on data shared between tasks, and on data shared between tasks and interrupt routines
其函数如下:
ATM_andi, ATM_andu. AND memory and return previous value
ATM_cleari, ATM_clearu. Clear memory and return previous value
ATM_deci, ATM_decu. Decrement memory and return new value
ATM_inci, ATM_incu. Increment memory and return new value
ATM_ori, ATM_oru. OR memory and return previous value
ATM_seti, ATM_setu. Set memory and return previous value
可以实保护中对数据区进运运算,可惜能查到例子,不知道保护一个数组操作时如何实现?
另外C62 和C64 是用C6x_disableIR和C6x_enableIR可以实现对所有中断进和行屏蔽,屏蔽哪此由参数mask决定;注意这里面不不有任务睡眠,阻塞之类的操作,
.include c64.h64
...
// disable interrupts specified by IEMASK
C64_disableIER IEMASK, b0, b1
...do some critical operation`
// enable interrupts specified by IEMASK
C64_enableIER IEMASK, b0, b1
HWI_disable 和 HWI_enable 可是对hardware interrupt进行管理,同SWI moudle 一样.
如果是 在两个task之间保护共享数,可以用TSK_disable();TSK_enable();来实现,这两函数不适用于中断程序,只能是TASK1 与TASK2 之间的数据操作保护。
在要修改数据的TASK里面,做如下处理
TSK_disable();
//data opertoin;
TSK_enable();
待续...
相关文章推荐
- 关于c#中数据的原子操作及让人郁闷的InterLocked类
- MES操作数据库后数据显示的一点小问题,关于DataView的rowfilter
- 关于iOS数据操作方式详解(二)— Jason数据解析
- 关于IOS数据操作方式详解(三)— Sqlite数据解析
- C++友元friend --c++利用friend修饰符,可以让一些你设定的函数能够对这些保护数据进行操作
- Silverlight中关于DomainService操作数据的分析
- 关于mysql source恢复数据过程中,select操作hang
- linux mutex 操作 线程数据保护
- 关于单CPU,多CPU上的原子操作
- 关于ajax的页面加载操作防止脏数据的产生
- 关于java对ORCALE中Date数据的操作
- 数据结构之关于树的操作(树的递归和非递归遍历)
- 关于TI DSP的EDMA乒乓操作
- 关于Android中JSON数据的操作
- 关于DBGrid,禁止在插入/修改操作状态下移动光标到其他行时,数据自动修改(非客户端)!
- 关于同步操作和数据同步的问题
- 多线程的原子操作和线程数据共享
- 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)
- 关于单CPU,多CPU上的原子操作
- Java中关于原子操作和volatile关键字