* UPDATE *STM32 printf的問題
這裏是我發現了什麼。每當我在那裏有這個功能,它實際上不會讓代碼鎖定。實際上,讀RTC I2C函數的執行速度非常慢,但代碼仍然可以正常運行,但每次讀RTC時都必須等待很長時間才能通過。所以最終發生的情況是RTC有一個報警中斷,並且這引發了ISR內部的其他I2C交互,所以它看起來像是在試圖同時進行兩個i2c通信,因此減慢了過程。我刪除了ISR中的函數,現在它的工作我將繼續調查。
我在使用IAR 5.40編程STM32F103微代碼時遇到了這個問題我有這個函數,如果我嘗試printf一個局部變量,它會導致代碼在另一個點的方式下凍結,然後它甚至到達那個函數。
什麼可能導致這?
這是功能
u8 GSM_Telit_ReadSms(u8 bSmsIndex)
{
char bTmpSms[3] = { 0 };
itoa(bSmsIndex, bTmpSms, 10); // converts the smsindex into a string
printf("index = %s\n", bTmpSms); //this printf caused the code to get stuck in the RTC // byte read function !!!!!!!
GSM_Telit_RequestModem("AT+CMGR=""1", 10, "CMGR", 5, 0);
return 1;
}
我想這也和這不引起我經歷
u8 GSM_Telit_ReadSms(u8 bSmsIndex)
{
char bTmpSms[3] = { 0 };
itoa(bSmsIndex, bTmpSms, 10);
printf("index = 2\n");
GSM_Telit_RequestModem("AT+CMGR=""1", 10, "CMGR", 5, 0);
return 1;
}
鎖沒有任何啓用的優化,並試圖在代碼卡從我的I2C RTC讀取一個字節,但只要我刪除這個printf("index = %s\n", bTmpSms);
或使用這個而不是printf("index = 2\n");
那麼一切都很開心任何想法?
編輯:bSmsIndex實際上永遠不會超過30個,即使如此,在調用此函數之前,鎖定會發生在wayyyy上。
你是說即使這個函數還沒執行一次,鎖定會發生嗎? – 2010-10-12 19:04:26
是的,就是這樣! – jramirez 2010-10-12 19:24:58
哦 - 這是一個非常有趣的方面,直到現在我才意識到。當您停留在讀取I2C RTC時,堆棧是否會顯示任何有趣的內容?你在使用多任務嗎? – 2010-10-12 19:46:49