1: 声明数据, 但没赋值就被使用, 如下面的 u8 i;
for(u8 i;i<8;i++){
printf(" %d ",i);
}
上面的示例代码, 绝大部分时候, 会如期输出 0, 1, 2, 3, 4, 5, 6, 7
但是! 但是! 但是! 某个时候值不是这样的, 什么值? 什么时候?
2: 先清中断, 后清中断
void TIM6_DAC_IRQHandler(void)
{
TIM6->SR = 0; // A位
TimesCount--;
if(TimesCount==0)
TIM6->CR1 = 0;
TIM6->SR = 0; // B位
}
A位和B位, 只是示例, 现实中当然是只使用其中的一行.
这就是常见的: 先清中断和后清中断最清晰的示例了, 延时差了一倍时间, 不管是us, 还是ms, 注意, 并不是因为执行中间的代码花了时间, 而是内部处理机制. 曾在这个先后顺序上费了近一天时间.
代码上是没错的, 逻辑也没错, 任你查也根本发现不.
先清中断、后清中断是两回事, 为什么? 不为什么, 没资料, 你试试百度, 查无下文!!
3: 宏标识符
#define 24L01_SPI_CS_GPIO GPIOH
#define 24L01_SPI_CS_PIN PIN5
错误提示: error in include chain : macro name must be an identifier (宏名称必须是标识符)。
上面这种引脚的宏定义方法,很多人天天用着. 但,这个很多人里面,绝大部分不知道上面问题在哪。
别想了,度娘.............不能以数字开头, 就这简单, 只是那错误提示带着你绕远路了。
4:中断处理函数里调用函数
这个,你一定中过枪! 不论多简单的程序,不要在中断里面调用函数!!!
因为: 它出错时,你根本不会得到错误提示,查找中断类错误是个丧气事。
铁律:
不要在中断里调用函数!如果要,快进快出,确保清晰每一行代码!
绝对禁止:函数调用再调用的,更甚者,调用中还有延时函数!
5:低于1ms的中断
如果,芯片刚启动时工作正常,过一会就不正常了,程序查无错误,那么......
查查程序中有没有低于1ms的中断。中断进出过于频繁时,芯片消耗资源过多......用手摸摸芯片,看是不是有点发烫了。
有什么事,必须要1秒处理1000次以上的?才十元八块的芯片现在这么牛叉了吗?
用过FreeRTOS的同学都知道,最小计时单位:1ms.
不是小于1ms的中断能设,只是要特别小心特别小心。
1: 声明数据, 但没赋值就被使用, 如下面的 u8 i;
for(u8 i;i<8;i++){
printf(" %d ",i);
}
上面的示例代码, 绝大部分时候, 会如期输出 0, 1, 2, 3, 4, 5, 6, 7
但是! 但是! 但是! 某个时候值不是这样的, 什么值? 什么时候?
2: 先清中断, 后清中断
void TIM6_DAC_IRQHandler(void)
{
TIM6->SR = 0; // A位
TimesCount--;
if(TimesCount==0)
TIM6->CR1 = 0;
TIM6->SR = 0; // B位
}
A位和B位, 只是示例, 现实中当然是只使用其中的一行.
这就是常见的: 先清中断和后清中断最清晰的示例了, 延时差了一倍时间, 不管是us, 还是ms, 注意, 并不是因为执行中间的代码花了时间, 而是内部处理机制. 曾在这个先后顺序上费了近一天时间.
代码上是没错的, 逻辑也没错, 任你查也根本发现不.
先清中断、后清中断是两回事, 为什么? 不为什么, 没资料, 你试试百度, 查无下文!!
3: 宏标识符
#define 24L01_SPI_CS_GPIO GPIOH
#define 24L01_SPI_CS_PIN PIN5
错误提示: error in include chain : macro name must be an identifier (宏名称必须是标识符)。
上面这种引脚的宏定义方法,很多人天天用着. 但,这个很多人里面,绝大部分不知道上面问题在哪。
别想了,度娘.............不能以数字开头, 就这简单, 只是那错误提示带着你绕远路了。
4:中断处理函数里调用函数
这个,你一定中过枪! 不论多简单的程序,不要在中断里面调用函数!!!
因为: 它出错时,你根本不会得到错误提示,查找中断类错误是个丧气事。
铁律:
不要在中断里调用函数!如果要,快进快出,确保清晰每一行代码!
绝对禁止:函数调用再调用的,更甚者,调用中还有延时函数!
5:低于1ms的中断
如果,芯片刚启动时工作正常,过一会就不正常了,程序查无错误,那么......
查查程序中有没有低于1ms的中断。中断进出过于频繁时,芯片消耗资源过多......用手摸摸芯片,看是不是有点发烫了。
有什么事,必须要1秒处理1000次以上的?才十元八块的芯片现在这么牛叉了吗?
用过FreeRTOS的同学都知道,最小计时单位:1ms.
不是小于1ms的中断能设,只是要特别小心特别小心。
举报