do{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
关于这里的运算我发现有一个逻辑错误 在未到时间时 得到的temp值为 0x00000001 当到时间时 temp=0x00010001
根据c语言运算符优先关系 先算(1<<16) 设得到 b 再算 (temp&b)设得到c 再进行非运算 !c 设得到 d 之后是 temp & 0x01 && d
先进行&运算 在进行&& 运算 也就是说 在得到 temp & 0x01 && d 这个式子之后 先进行 temp & 0x01 运算的
0x00000001 & 0x01 等于 0x00010001 & 0x01 等于 0x01 那为什么要进行这一步运算呢
这算是原创吧
是不是stm32 都是跑os的 不然怎么这个错误会存在到现在
---------------------------------
哦,这个是防止其他地方意外关闭systick导致死循环的现象而设置的。
回复【3楼】canglang: --------------------------------- 哦,这个是防止其他地方意外关闭systick导致死循环的现象而设置的。
---------------------------
受教了 原来如此 谢谢原子哥的解惑
一周热门 更多>