完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ucos-ii系统自带的一些函数,都会用某个变量来保存cpu的状态寄存器,为了好识别,一般是用cpu_sr;
譬如: INT8U OSSemPost (OS_EVENT *pevent) { #if OS_CRItiCAL_METHOD == 3u /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0u; #endif ... INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *p_sem_data) { INT8U i; OS_PRIO *psrc; OS_PRIO *pdest; #if OS_CRITICAL_METHOD == 3u /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr = 0u; #endif ... 有一点我比较奇怪,为什么开关中断这个两个函数: #define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} #define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} 同样使用cpu_sr来保存cpu状态寄存器,但是在函数中没用定义cpu_sr这个变量呢,而是需要在调用这个两个函数的任务或者中断中定义这个变量 OS_CPU_SR cpu_sr = 0u; 如果这样: #define OS_ENTER_CRITICAL() {OS_CPU_SR cpu_sr = 0u; cpu_sr = OS_CPU_SR_Save();} #define OS_EXIT_CRITICAL() {OS_CPU_SR cpu_sr = 0u; OS_CPU_SR_Restore(cpu_sr);} 可以吗? 或者ucos-ii系统中为什么不干脆吧cpu_sr定义成一个全局变量呢? |
|
相关推荐
4个回答
|
|
这个你就要问UCOS的作者了。
|
|
|
|
#define OS_ENTER_CRITICAL() {OS_CPU_SR cpu_sr = 0u; cpu_sr = OS_CPU_SR_Save();}
#define OS_EXIT_CRITICAL() {OS_CPU_SR cpu_sr = 0u; OS_CPU_SR_Restore(cpu_sr);} 这样写会使得cpu_sr回不去,下面写法可以保证OS_CPU_SR_Restore(cpu_sr)中的cpu_sr为中断打断时的cpu_sr,两个配套使用 #define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();} #define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);} |
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
683 浏览 1 评论
2113 浏览 5 评论
2420 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2186 浏览 6 评论
2158 浏览 7 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
307浏览 9评论
295浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
431浏览 6评论
295浏览 5评论
344浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-20 00:50 , Processed in 0.846507 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号