|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
Small RTOS51 1.12 的1個(gè)Bug |
| 作者:yuan2828 欄目:MCU技術(shù) |
Small RTOS51 1.12 的1個(gè)Bug 在陳先生的<<嵌入式實(shí)時(shí)操作系統(tǒng)Small RTOS51原理及應(yīng)用>>第18章的串口通信驅(qū)動(dòng)程序發(fā)送部分,使用OSQIntPost而不是OSQPost來放數(shù)據(jù)到通信緩沖區(qū),還說這樣做的有好處,不必?zé)o謂的任務(wù)調(diào)度。我使用的時(shí)候發(fā)現(xiàn)以下bug,沒有詳細(xì)測(cè)試,究竟OSQIntPost還有沒有其它bug //OS_Q_MEM_SEL = xdata unsigned CHAR OS_Q_MEM_SEL fenji_buf[16]; //發(fā)送接收緩沖區(qū) //*******************************************************************//串口中斷 #if EN_OS_INT_ENTER >0 #pragma disable /* 除非最高優(yōu)先級(jí)中斷,否則,必須加上這一句*/ #endif void fenji_serial () interrupt fenji_irq //using 2 { unsigned CHAR a; if (fenji_RI) { #if EN_OS_INT_ENTER >0 OS_INT_ENTER(); #endif fenji_RI = 0; OSQIntPost(fenji_buf,fenji_SBUF); OSIntExit(); return; } if (fenji_TI) { fenji_TI = 0; if ( OSQAccept( &a,fenji_buf) == OS_Q_OK ) { fenji_SBUF = a; } else { fenji_uart_send_en = 1; } } } void uart_CHAR(uint8 a) { OS_ENTER_CRITICAL(); if (fenji_uart_send_en) //串口忙嗎? { fenji_uart_send_en = 0; SBUF = a; OS_EXIT_CRITICAL(); return; } OS_EXIT_CRITICAL(); // while (OSQPost(fenji_buf,a) != OS_Q_OK) while (OSQIntPost(fenji_buf,a) != OS_Q_OK) { OSWait(K_TMO,1); //緩沖區(qū)滿,延時(shí) } } 用OSQPost正確數(shù)據(jù) * * 1B 40 1B 61 31 1D 21 11 C4 FA CA C7 41 31 32 33 BA C5 B9 CB BF CD 1B 64 01 C4 FA B0 EC C0 ED B5 C4 CA C7 B4 A2 D0 EE D2 B5 用OSQIntPost錯(cuò)誤數(shù)據(jù) * * 1B 40 1B 61 31 1D 21 11 C4 FA CA C7 41 31 32 BA 33 C5 B9 CB BF CD 1B 64 01 C4 FA B0 EC C0 B5 ED C4 CA C7 B4 A2 D0 EE D2 B5 錯(cuò)誤現(xiàn)象:在16,17位置的數(shù)據(jù)顛倒了,后面31,32的又顛倒了,后面還有,有逐步向前移的催勢(shì)。。。 |
| 2樓: | >>參與討論 |
| 作者: zlg900 于 2006/3/1 10:05:00 發(fā)布:
非常感謝您的意見,我會(huì)向相關(guān)人員轉(zhuǎn)告這個(gè)問題! |
|
| 3樓: | >>參與討論 |
| 作者: yuan2828 于 2006/3/1 15:25:00 發(fā)布:
Small RTOS51 好象OSQPost也有這樣的問題,Small RTOS51 的定時(shí)中斷是20ms,串口緩沖區(qū)的大小是16字節(jié)就有問題,增大了好象就沒有了。上面錯(cuò)誤相象是從串口接收到的數(shù)據(jù)。本人認(rèn)為,對(duì)于隊(duì)列,我只用FIFO,我不可能把2個(gè)數(shù)據(jù)顛倒了,數(shù)據(jù)錯(cuò)了,還可能是我程序的問題。顛倒了,就奇怪了 |
|
| 4樓: | >>參與討論 |
| 作者: jinjing999 于 2006/3/8 11:10:00 發(fā)布:
我用這個(gè)函數(shù)也出現(xiàn)的情況說一下 用此函數(shù),把AD轉(zhuǎn)換的數(shù)值顯示出來,我發(fā)現(xiàn)一端時(shí)間總會(huì)轉(zhuǎn)換出有一個(gè)與此數(shù)值不與以前相差比較遠(yuǎn)的數(shù)值,并且每次出現(xiàn)的數(shù)值基本相同,剛開始我以為是干擾引起的,由于此數(shù)值與真實(shí)數(shù)值相差比較遠(yuǎn),我就在顯示中用算法過濾掉了,看到這個(gè)帖子,我把我的應(yīng)用情況說出來,我沒有進(jìn)行過測(cè)試. |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |