音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場(chǎng)網(wǎng)
技術(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
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
非常感謝您的意見,我會(huì)向相關(guān)人員轉(zhuǎn)告這個(gè)問題!
 
3樓: >>參與討論
yuan2828
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
我用這個(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è)試.


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
支持電池管理的復(fù)位器件,,,,SP691使用,,,,,,
請(qǐng)教周立功,我的串口竊電問題
問ZLGMCU TKS_936仿真頭上可不可以裝32K晶振作RTC仿真
請(qǐng)問關(guān)于中斷嵌套的問題
周工請(qǐng)指教
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)