完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
看邵贝贝的书上3.11说时钟节拍的问题,强调要在OSStart之后再启动systick,但是看原子的例程里,为什么实在main函数一开始调用delay_init(),并且在里面启动了systick定时器。我看了网上的一些其他代码,貌似好多都是在OSInit()之前调用一些初始化函数,并且在初始化函数中启动了systick定时器,这里是否存在一些问题。从操作系统本身的角度来说,对于任何一个操作系统来说,也应该在初始化好了相关环境,有了一些任务之后,才能打开系统节拍进行多任务调度吧?
还有一个问题是官方文档中建议的main函数的写法是在函数开始时调用BSP_IntDisAll()禁止所有中断,直到进行完了初始化之后再启用中断,但是我看到的例程里没有这样做,这里是否会有一些问题? |
|
相关推荐
4个回答
|
|
//systick中断服务函数,使用ucos时用到
void SysTick_Handler(void) { OSIntEnter();//进入中断 OSTimeTick(); //调用ucos的时钟服务程序 OSIntExit(); //触发任务切换软中断 } 这是我们的中断服务函数,systick的。 里面的三个函数,都有判断: if (OSRunning == OS_TRUE) 而如果OS没有跑,OSRunning=OS_FLASE。 所以就不会执行if后面的代码。 因此,不论你是否在之前还是之后调用,都是受控OSRunning的,而这个,必须OSStart之后,才会是TRUE。 另外,至于禁止所有中断,你可以添加这个代码。 |
|
|
|
明白了,我看的是官方的例程,里面的用的是
OS_ENTER_CRITICAL(); OSIntNesting++; OS_EXIT_CRITICAL(); OSTimeTick(); OSIntExit(); 如果OSRunning != OS_TRUE会到执行到OSTimeTick()才跳出。不过这里对OSIntNesting++的增加貌似就没有像OSIntEnter()里检查255了。 |
|
|
|
官方的例程是在哪里下载的,请问,我也想看看。谢谢。
|
|
|
|
ucos的官网上有,注册一个帐号就能下载
|
|
|
|
只有小组成员才能发言,加入小组>>
615 浏览 0 评论
1073 浏览 1 评论
2443 浏览 5 评论
2771 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2599 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
625浏览 9评论
615浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
738浏览 6评论
594浏览 5评论
639浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-29 05:47 , Processed in 0.986202 second(s), Total 85, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号