完善资料让更多小伙伴认识你,还能领取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);} |
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
807 浏览 0 评论
1159 浏览 1 评论
2534 浏览 5 评论
2867 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2717 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1094浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 14:58 , Processed in 1.301401 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号