|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
紅皮書第469頁 ucosII疑問 |
| 作者:randomkuan 欄目:ARM技術 |
uint8 UART0Getch(void) { uint8 err; OS_ENTER_CRITICAL(); while((U0LSR & 0x00000001) == 0) { /* 沒有收到數(shù)據(jù) */ U0IER = U0IER | 0x01; /* 允許接收中斷 */ OSSemPend(Uart0Sem, 0, &err); /* 等待接收數(shù)據(jù) */ } err = U0RBR; /* 讀取收到的數(shù)據(jù) */ OS_EXIT_CRITICAL(); return err; } 函數(shù)首先判斷UART0的FIFO中是否有數(shù)據(jù),如果沒有,則允許UART0的接收數(shù)據(jù)可用中斷和等待一個信號量.UART0的中斷在接收到數(shù)據(jù)后會發(fā)送這個信號量,函數(shù)恢復運行. 問題: 為了函數(shù)可以重入,函數(shù)一開始就關了中斷OS_ENTER_CRITICAL();,使IRQ中斷禁止,也就是說就算UART0硬件收到數(shù)據(jù)了,程序也不會響應串口IRQ中斷程序,那么這個信號量就發(fā)不出了 .請問我是不是理解錯了? |
| 2樓: | >>參與討論 |
| 作者: zxwwwwcom 于 2006/1/25 17:06:00 發(fā)布:
是的。。 OSSemPend(Uart0Sem, 0, &err); /* 等待接收數(shù)據(jù) */ 函數(shù)會進行任務切換,當恢復其他任務的時候,中斷就打開了,請仔細看看移植代碼。 歡迎交流 |
|
| 3樓: | >>參與討論 |
| 作者: randomkuan 于 2006/1/29 15:38:00 發(fā)布:
多謝zxwwwwcom 重新看過代碼了,明白了,謝謝zxwwwwcom ,我的qq是26505065,大家交流交流! |
|
| 4樓: | >>參與討論 |
| 作者: yzhu 于 2006/2/1 18:27:00 發(fā)布:
傻傻地問: "紅皮書"是指哪本書? |
|
| 5樓: | >>參與討論 |
| 作者: 上善若水 于 2006/2/5 9:43:00 發(fā)布:
接著問兩個問題: 1.“為了函數(shù)可以重入,函數(shù)一開始就關了中斷OS_ENTER_CRITICAL();,”是什么意思,周立功的這個串口驅動里,為什么每個函數(shù)都有進入臨界區(qū)的部分? 2. 請問zxwwwwcom,“函數(shù)會進行任務切換,當恢復其他任務的時候,中斷就打開了,請仔細看看移植代碼!甭闊┠僬f的細一點,看移植代碼的哪部分? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |