记一次数据越界的事
最近在作一個基于聯盛德的 W600芯片進行ayla云移植時,用到了操作系統的tick獲取,獲取函數如下:
u32 clock_ms(void)
{
?? ?u32 ms;
?? ?if (configTICK_RATE_HZ == 1000) {?? ?/* compile-time evaluated */
?? ??? ?ms = xTaskGetTickCount();
?? ?} else {
?? ??? ?ms = xTaskGetTickCount() * 1000 / configTICK_RATE_HZ;
?? ?}
?? ?return ms;
}
測試中出現了奇怪的問題,系統走著走著就不發心跳包了,最后跟蹤后發現是上面這個函數返回的值突然變零;
?
我們預想上面的返回值會一直增加,至少要很久才會翻轉,但它只跑了2個多小時就反轉了,后來作了修改:
u32 clock_ms(void)
{
?? ?u32 ms;
?? ?if (configTICK_RATE_HZ == 1000) {?? ?/* compile-time evaluated */
?? ??? ?ms = xTaskGetTickCount();
?? ?} else {
?? ??? ?ms = xTaskGetTickCount() * (1000 / configTICK_RATE_HZ);
?? ?}
?? ?return ms;
}
?
這樣后,反轉的就不那么快了;
再在其它地方加上對反轉的判斷,系統心跳包總算發送正常;
在家可以體會一下上而所加的括號的用處!
總結
- 上一篇: 怎么考英语教师资格证
- 下一篇: 记一次WiFi芯片W600上串口只能回显