[問題] 改寫UART程式 ,不使用while等待
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Ansi C
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
MCU 自訂的函數
問題(Question):
不想使用while在那裏不斷地等待,占用CPU的時間.
那段時間可以執行近萬行指令.
餵入的資料(Input):
同樣的參數
預期的正確結果(Expected Output):
同樣的結果
錯誤結果(Wrong Output):
現在測試出的結果有
1.程式亂飛(PC亂了)
2.不斷地持續傳送
程式碼(Code):(請善用置底文網頁, 記得排版)
好讀版
http://ideone.com/dz4HER
void UART1WriteString( char *string)
{
// P_Debug_O=1;
while(*string != '\0')
{
while(!UARTTransmitterIsReady(UART_MODULE_ID))
;
UARTSendDataByte(UART_MODULE_ID, *string);
string++;
while(!UARTTransmissionHasCompleted(UART_MODULE_ID))
;
}
// P_Debug_O=0;
}
補充說明(Supplement):
我試過下面這一種寫法還是不行
IO_FLAG是自己訂的Union,用來作流程控制的.
void UART1Trans_fail( void)
{
P_Debug_O=1;
if(UARTTransmitterIsReady(UART_MODULE_ID))
{
UARTSendDataByte(UART_MODULE_ID, U1TX_Buffer[U1TX_Index]);
// IO_FLAG.U1TXP=1; //Uart1 TX in processing flag hand up
IO_FLAG.U1TXReady=0;
}
// P_Debug_O=0;
if(UARTTransmissionHasCompleted(UART_MODULE_ID))
{
// IO_FLAG.U1TXP=0;
if(U1TX_CNT==0) //check need to send next byte
{
IO_FLAG.U1TXReady=1;
IO_FLAG.U1TXP=0;
}
U1TX_CNT--;
U1TX_Index++;
}
P_Debug_O=0;
}
//
--
在臺灣,何謂R&D工程師?
1.Reverse and Decap :IC反向工程,去膠,打開封裝,拍照,複製電路佈局。
2.Resign and Die :沒死的就操到辭職,沒辭職的就操到死。
3.Rework and Debug :計畫永遠跟不上變化,變化永遠跟不上老闆的一句話!
4.Relax and Delay :太過於輕鬆(Relax),那麼就要有schedule delay的準備!
但是外派到大陸的臺灣郎,晚上是R (鴨)陪客戶,白天是D (豬)任人宰割!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.80.225.76
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1407471920.A.E5C.html
推
08/08 13:21, , 1F
08/08 13:21, 1F
→
08/08 13:21, , 2F
08/08 13:21, 2F
範例程式就是那一支使用while的.
已經可以猜到原廠的說法了.我們保證我們的function是好的.
怎麼用是客戶的事情...
yes!! YOU KNOW.
※ 編輯: kingzero (115.80.225.76), 08/08/2014 13:55:47
推
08/08 14:21, , 3F
08/08 14:21, 3F
→
08/08 14:22, , 4F
08/08 14:22, 4F
UART會產生中斷,我試試看中斷怎麼做.但是我還必須搞懂兩個旗標什麼情況會舉起跟放下.
※ 編輯: kingzero (115.80.225.76), 08/08/2014 14:58:14
→
08/08 20:32, , 5F
08/08 20:32, 5F
→
08/08 20:33, , 6F
08/08 20:33, 6F
→
08/08 20:33, , 7F
08/08 20:33, 7F
推
08/09 00:58, , 8F
08/09 00:58, 8F
推
08/09 01:25, , 9F
08/09 01:25, 9F
我實在是很不想說是哪一款MCU.因為會顛覆大家的那款MCU的良好印象.
推
08/10 20:27, , 10F
08/10 20:27, 10F
那款MCU在官方網站上的sample code就只可以動.而且還是使用while的方式在等狀態.
Interrupt只是跳出去,不處理.
可以參考下面的的超鏈結.
http://ideone.com/dz4HER
MCU大廠表示:我們只證明我的硬體是好的,怎麼應用是客戶的事情.
※ 編輯: kingzero (115.80.237.25), 08/11/2014 09:34:54
※ 編輯: kingzero (115.80.237.25), 08/11/2014 14:42:37
推
08/12 02:17, , 11F
08/12 02:17, 11F
→
08/12 02:18, , 12F
08/12 02:18, 12F
→
08/12 02:19, , 13F
08/12 02:19, 13F