声明:下列内容摘自吕进华整理的,uC/OS-II 2.0 的chm格式的电子书中。
2.18.2 测试并置位
如果不使用实时内核,当两个任务共享一个资源时,一定要约定好,先测试某一全程变量,如果该变量是0,允许该任务与共享资源打交道。为防止另一任务也要使用该资源,前者只要简单地将全程变量置为1,这通常称作测试并置位(Test-And-Set),或称作TAS。TAS操作可能是微处理器的单独一条不会被中断的指令,或者是在程序中关中断做TAS操作再开中断,如程序清单2.5所示。
程序清单2.5 利用测试并置位处理共享资源 |
Disable interrupts; 关中断 |
if (‘Access Variable’ is 0) { 如果资源不可用,标志为0 |
Set variable to 1; 置资源不可用,标志为1 |
Reenable interrupts; 重开中断 |
Access the resource; 处理该资源 |
Disable interrupts; 关中断 |
Set the ‘Access Variable’ back to 0; 清资源不可使用,标志为0 |
Reenable interrupts; 重新开中断 |
} else { 否则 |
Reenable interrupts; 开中断 |
/* You don’t have access to the resource, try back later; */ /* 资源不可使用,以后再试; */ |
} |
有的微处理器有硬件的TAS指令(如Motorola 68000系列,就有这条指令)
转载请注明:在路上 » 利用测试并置位处理共享资源
说明
这是我从网上下载的uC/OS-II 2.0 Word文档的内容转化而来的。把它做成这样完全是为了大家学习的方便,希望大家会喜欢。
我自己本身是个电子和电脑的爱好者,用C语言编写过一些小程序,也用单片机制作过一些小东西,不过那些东西都太简单。当我看见这个东西的时候,就觉得真的是时候了,真是好东西,如果能学会使用的话一定会受益非浅。如果可能的话,最好是能够去卖一本原书,因为看书比看电脑屏幕方便多了,还可以很好的收藏。
我用的版本是:《嵌入式实时操作系统uc/os-II(第二版)》
2003年5月第一版,2007年9月第7次印刷
Reenable interrupts; 重新开中断
Disable interrupts; 关中断
if (‘Access Variable’ is 0) { 如果资源未占用,标志为0
Set variable to 1; 置资源已占用,标志为1
1. 这个哥们,既然你说我有抄错的地方,那麻烦你指出来啊。
2.“此篇文章是根据邵贝贝的ucosii上面的”,本来就是的啊,我也注明了“下列内容摘自吕进华整理的,uC/OS-II 2.0 的chm格式的电子书中”。
3.我刚回去对照了“uCOS-II 2.0.chm”,没看到有何不一样的。另外对你所说的我自己是否看懂,那就是我的事情了,和我拷贝内容,粘贴到这里,貌似没有什么关系吧?难道拷贝粘贴东西,并且说明了出处来源,也有错???希望收到你的回复。