新手上路
- 积分
- 22
- 金钱
- 22
- 注册时间
- 2013-7-25
- 在线时间
- 4 小时
|
原子哥好,诸位大神好。这里有一个问题希望原子哥和诸位大神指导。
我在学习原子哥的战舰开发指南(寄存器版)的第59章,ucos信号量和邮箱时遇到了一个问题。
原子哥在main函数中进行初始化时,对systick进行了初始化。但是我在学习ucos时发现译者提到systick的初始化应在第一个任务(开始任务)进行。
因此,我对程序进行了修改。将systick的初始化,即delay_init(72)函数移到了开始任务中。然后我发现程序不能正常运行了。
仔细寻找原因,我发现在main函数中进行了LCD_Init()初始化,在LCD初始化函数中调用了delay_ms()函数,这个函数需要systick,而我把systick初始化移到开始任务了,systick->val始终为0,因此程序就在delay_us()函数里陷入死循环了。
systick初始化应在第一个任务,而硬件初始化应在main中完成。这里形成了一个矛盾。
我想请教原子哥及诸位,systick在开始任务中进行初始化是否是个硬性规定。如果是的话,我是否可以在main函数中先对systick进行初始化,以完成LCD的初始化,然后在开始任务中再为ucos对systick进行初始化。
或者有其他方式解决?
请原子哥及诸位大神赐教。 |
|