新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 單片機程序問題總結(jié)

        單片機程序問題總結(jié)

        作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏
        BL51: WARNING 16 (UNCALLED SEGMENT, IGNORED FOR OVERLAY ...)
        原因是聲明的函數(shù)沒有調(diào)用。才產(chǎn)生這個警告。
        詳細說明見下面網(wǎng)址內(nèi)部。
        http://www.keil.com/support/docs/875.htm
        解決辦法:
        1將沒調(diào)用的函數(shù)部分注釋掉。等用到的時候在取消注釋。
        2調(diào)用一下,這個函數(shù)。(廢話)
        3使用條件編譯。
        #if 0
        void uncalled_function (void)
        { }
        #endif
        碰到的問題
        目標器件:C8051F340
        編譯環(huán)境:Keil uV4.
        項目需要,定義了一個數(shù)組
        U8 xdata recv_para[PARA_LENGTH]={0}; //PARA_LENGTH=64
        該數(shù)組如果不加xdata修飾,會報錯,提示ram空間不夠。
        *** ERROR L107: ADDRESS SPACE OVERFLOW
        加上xdata修飾后,經(jīng)過測試發(fā)現(xiàn)程序不對。debug調(diào)試也不執(zhí)行。莫名其妙。
        然后將xdata修飾符改為idata后。程序可以正常運行。但是這樣的話定義的數(shù)組還是會占用單片機內(nèi)部ram空間。內(nèi)部只有256字節(jié)ram
        如果后續(xù)還要添加功能,可能內(nèi)部ram還是不夠用。
        所以想利用單片機的外部ram。也就是datasheet里面說的XRAM來存放這個數(shù)組。datasheet里面說c8051f340這個單片機有個4k大小的XRAM可以用。
        經(jīng)過查網(wǎng)上資料發(fā)現(xiàn)用修飾符xdata,是沒有錯誤的。
        網(wǎng)上有很多關(guān)于data,idata,xdata的用法文檔,這里就不引述了。
        最終發(fā)現(xiàn)有個網(wǎng)友碰到的問題和我一樣。
        鏈接:http://www.amobbs.com/thread-4453022-1-1.html
        鏈接:http://www.amobbs.com/thread-3950965-1-1.html
        根據(jù)網(wǎng)友的解釋:
        1.初始化時間太長 ,看門狗默認開,沒關(guān)。
        2.根本原因是初始化的時間過長,超過了看門狗的時間,初始化完成以后才能進入main函數(shù),這時關(guān)狗已經(jīng)來不及了,這時要修改startup.a51(記得把它加入復制到工程而不是修改系統(tǒng)的),在第一條指令前加入關(guān)狗的指令,在main函數(shù)里再開(如果需要的話)。
        所以,我在STARTUP.A51文件里面第131行添加了一條關(guān)閉看門狗的語句。
        MOV 0D9H,#00h ; 關(guān)開門狗
        關(guān)閉看門狗之后,再用xdata修飾符 修飾數(shù)組,然后初始化,就沒有問題了。
        還有一個解決方法就是定義的全局變量或者數(shù)組之類的。不要對其進行初始化。等到main程序里面,通過主動賦值的方式主動初始化。


        關(guān)鍵詞: 單片機程序問

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 左贡县| 阜南县| 广州市| 保康县| 美姑县| 平邑县| 东宁县| 绵阳市| 工布江达县| 高尔夫| 偃师市| 湖口县| 阳西县| 阳江市| 洛宁县| 武川县| 额济纳旗| 安达市| 太白县| 荆州市| 建始县| 桐乡市| 巴林左旗| 南投市| 镇远县| 南陵县| 手游| 定南县| 皮山县| 泌阳县| 阳原县| 灵川县| 虎林市| 资阳市| 莫力| 军事| 隆化县| 盐山县| 大城县| 金昌市| 泸西县|