您的位置:首页 > 其它

关于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();

 待续...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  assembly variables c 任务