OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9163|回复: 2

ucos与LCD的问题求助

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2013-7-25
在线时间
4 小时
发表于 2013-8-12 10:46:12 | 显示全部楼层 |阅读模式
原子哥好,诸位大神好。这里有一个问题希望原子哥和诸位大神指导。
我在学习原子哥的战舰开发指南(寄存器版)的第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进行初始化。
或者有其他方式解决?
请原子哥及诸位大神赐教。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-8-12 11:06:26 | 显示全部楼层
1-硬件初始化 可以放在 任务初始化前面,也可以放在UCOS和第一任务里,具体得看你实际需求。
2-systick 为UCOS提供时钟,这个可以放在硬件 初始化那,也可以放在 第一个任务,至于为什么,自己想想。
3-LCD初始化如果 要用到systick 就必须 放在 其后面。
1-1
回复 支持 反对

使用道具 举报

4

主题

8

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2013-7-25
在线时间
4 小时
 楼主| 发表于 2013-8-12 21:46:33 | 显示全部楼层
回复【2楼】mygod:
---------------------------------
谢谢您的回复。但还想请教:
systick确实可以放在硬件初始化那,或者放在开始任务那,因为程序都能跑起来。但为什么邵贝贝老师在其译著中提到要将systick的初始化放到开始任务中呢?这两者有什么本质区别吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-15 06:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表