萌新刚开始学没多久的32 最近写东西老是出bug所以我就想了解下原理 萌新没有金币悬赏 就这么几个接下来是问题 第一个问题 :
:【ucos 运行需要一个系统时钟节拍(类似 “心跳”),
而这个节拍是固定的(由 OS_TICKS_PER_SEC 宏定义设置),比如要求 5ms 一次(即可设置:
OS_TICKS_PER_SEC=200),在STM32 上面,一般是由SysTick 来提供这个节拍,也就是SysTick
要设置为 5ms 中断一次,为 ucos 提供时钟节拍,而且这个时钟一般是不能被打断的。】
这是寄存器版本手册里的一段话 下面是毫秒级延时函数
===============================================================================
//延时nus
//nus 为要延时的 us 数.
void delay_us(u32 nus)
{
u32 temp;
72
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do {
temp=SysTick->CTRL;
}while((temp&0x01)&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
================================================================================
最后两行关闭了这个时钟 那最前面那段话里的系统节拍谁来提供呢?
第二个问题就比较宽泛了:我写程序的时候遇到过延时函数无法使用的情况,什么时候会遇到这种情况呢,还有我定时器时1间500没有用但是49就有作用是什么情况呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
等等 跑系统是啥意思 我最开始看到ucos也有疑惑 但是我查了资料之后还是不是很明白 手册上也没有说 我写的就是想倒立摆这种程序 这种程序是不需要用到系统的吗
跑系统指的是像UCOS这种嵌入式实时操作系统,
绝大多数简单的MCU应用都是不用操作系统(操作系统有较大的资源开销)的,
直接裸机编程就行了。
一周热门 更多>