完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
FreeRTOS内核默认会初始化systick;原子哥的视频教程里的例程也会使用delay_init初始化systick。
请问是否是必须,有无影响? |
|
相关推荐
5个回答
|
|
FreeRTOS使用了系统时钟SystemCoreClock(F103板子就是72M)做为滴答定时器的时基,所以做为用户的我们就只能在自己编写的delay.c中也使用SystemCoreClock,而不是1/8;因此需要将裸机版本的delay.c中的滴答定时器时基改为SystemCoreClock!这样我们就可以使用裸机下比如delay_us()函数了。
在main函数开始的时候使用delay_init()的目的是为了初始化函数delay_xms(u32 nms)和delay_us(u32 nus)所需要的某些因子(这两个函数不是用的系统延时函数),这样你就可以在你的工程里像使用裸机一样使用这两个延时函数了。 也可以把delay_init()函数里的这行注释掉”SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);” 因为任务开启任务调度器里也有这样的设置(包括systick的相关寄存器设置)。 |
|
|
|
http://www.openedv.com/forum.php ... &extra=page%3D1
|
|
|
|
如果不需要使用裸机延时函数delay_xms(u32 nms)和delay_us(u32 nus)的话,是不是就不需要delay_init,系统也是正常的?
|
|
|
|
这位道友,我一直有一个疑问。之前我也是有和楼主一样的问题。我之前是没有用原子的delay。sys。usart。这三个文件。我直接移植的官方例程,先用系统点了个灯。成功后,让灯闪烁我用到了延时,起初我用的是系统提供的延时vTaskDelay(),灯也开始拿着这个延时开始闪烁了。直到后来,学到后面的系统中断测试实验。
while(1) { printf("¹Ø±ÕÖжÏ.............rn"); portDISABLE_INTERRUPTS(); delay_xms(5000); printf("´ò¿ªÖжÏ.............rn"); portENABLE_INTERRUPTS(); delay_xms(5000); } 这个就是任务具体实现;程序中延时用vTaskDelay()函数不行。只能用原子的delay_xms() 我比对了一下区别。说是vTaskDelay会导致任务调度。我不明白怎么回事。或者说这两个延时函数到底什么时候用vTaskDelay(),什么时候用delay_xms()。道友能帮我解惑嘛? |
|
|
|
portDISABLE_INTERRUPTS(); 为什么要在这里关中断?
|
|
|
|
只有小组成员才能发言,加入小组>>
798 浏览 0 评论
1154 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1083浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 21:54 , Processed in 1.132666 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号