完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在 UCOSII 系统中
比如我现在有个32位的全局变量 u32 global_var1; 想在普通任务中和中断任务中都来操作该变量 任务1{ while(1) { func1(); //任务进入临界区,读取全局变量 global_var1,不允许写全局变量 global_var1 func2(); //任务退出临界区 func3(); delay(); } } 中断函数 { funca(); //进入临界区,写全局变量 global_var1 funcb(); //退出临界区 funcc(); } 比如上面那段示意代码,我想要保证 func2() 函数 和 funcb() 函数的执行时间绝对的错开,怎么保证呢? 我有试过使用 任务1{ while(1) { func1(); //任务进入临界区,读取全局变量 global_var1,不允许写全局变量 global_var1 OS_ENTER_CRItiCAL(); func2(); OS_EXIT_CRITICAL(); //任务退出临界区 func3(); delay(); } } 中断函数 { funca(); //进入临界区,写全局变量 global_var1 OS_ENTER_CRITICAL(); funcb(); OS_EXIT_CRITICAL(); //退出临界区 funcc(); } 这样写,可以跑一会,但是过会儿(大概5分钟左右)任务就不能调度了,但程序并 没有死,我打断点,程序还是可以进入中断任务,有点搞不清楚 了,谁知道怎么解决?谢谢! |
|
相关推荐
2个回答
|
|
版主您好,我之前有考虑过用信号量,可在看UCOS_II 中文注释文档中说,释放信号量函数OSMutexPost 不能在中断中使用,这里该怎样去使用?
还有一个问题就是:比如我现在有 2个中断函数,分别需要操作2个共享资源,主要是写操作;然后另外有一个普通任务里面,想读这2个共享资源,这个用信号量可以实现吗? 我主要是让他们各自的读和写绝对分开,避免写操作一半,就被错误读走了;或者读了一半,又被错误的写成其它的值了。 |
|
|
|
比如有2个共享资源
u32 global_var1, global_var2; 普通任务想读这两个全局变量; 普通任务{ while(1) { func_1(); //任务进入临界区,读取全局变量 global_var1,global_var2;不允许写全局变量 global_var1,global_var2 func_2(); //任务退出临界区 func_3(); delay(); } } 中断函数1 { func_a(); //进入临界区,写全局变量 global_var1 func_b(); //退出临界区 func_c(); } 中断函数2 { func_q(); //进入临界区,写全局变量 global_var2 func_w(); //退出临界区 func_e(); } 这个用信号量可以做吗? |
|
|
|
只有小组成员才能发言,加入小组>>
692 浏览 0 评论
1106 浏览 1 评论
2473 浏览 5 评论
2808 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2646 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
653浏览 9评论
649浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
781浏览 6评论
628浏览 5评论
668浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:36 , Processed in 1.038617 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号