在寫STC15實驗箱4的出廠測試程序.
發(fā)現(xiàn)memset(buf, 0, 256)一片256字節(jié)的xdata內(nèi)存時, 無法將這片內(nèi)存全部清0, 只清了不到0x20個字節(jié).
其他標準C庫函數(shù)e.g. sprintf, strlen 也不好使. 這咋玩啊?
后來通過換件法得知, 是外掛的32KXRAM和外掛的ST7920-12864都在使用P0和P2口引起的問題.
STC官方整出這樣的原理圖, 真是敗筆.
怪不得我買的其他STC官方板子, 都沒有焊接外掛RAM的芯片…
嘗試分析和折中解決這個問題.
筆記看看官方原理圖關(guān)于外掛XRAM和ST7920-12864這塊.
原理圖 - 外掛XRAM
XRAM用到了P0, P2, P4.2, P4.4, P4.5,
可以看到按照官方原有連接, 用到了P0, P2
如果是并口通訊, 就用到P0, P2
如果是串行通訊, 就用到P2
那理論上, 訪問xdata時, 就會動到P0, P2.
那保不準12864的上的P0, P2就會不是高阻狀態(tài), 如果12864給了P0, P2新的值, 就會對xdata的訪問造成錯誤.
初始化外部RAM時, 開始用了 ExternalRAM_enable();
只使用外部RAM, 內(nèi)部擴展RAM范圍(0 ~ 0x6ff)不用.
當初始化buf時, 從memset可以看到, 只清了不到0x20個字節(jié).
#define TMP_BUFFER_LEN 256
// ...
u8 xdata g_tmp_buf[TMP_BUFFER_LEN];
// ...
BUS_SPEED_1T(); //1T 2T 4T 8T 3V@22MHZ用1T會訪問錯誤
ExternalRAM_enable(); // 只使用外部RAM, 不使用內(nèi)部擴展RAM(0x0 ~ 0x6ff)
EA = 1;
my_memset(g_tmp_buf, 0, sizeof(g_tmp_buf));
現(xiàn)在只允許了外部RAM操作, 還沒執(zhí)行memest
將g_tmp_buf放到memory窗口中, 查看到的內(nèi)容是隨機的亂碼.
單步進入my_memset, 觀察清buf前后, g_tmp_buf在memory窗口中的內(nèi)容差別.
步過C庫函數(shù) memset, 本來要清0x100個字節(jié), 但是只清了不到0x20個字節(jié).
將LCD-12864硬件摘掉, 再執(zhí)行這個測試, 可以看到清掉了0x100個字節(jié), memset是正常的.
這說明, 12864連接到P0, P2口時, 對xdata的訪問是有影響的.
STC的資料上有說到, 如果使能內(nèi)部擴展RAM:
當xdata地址小于0x6ff, 會使用內(nèi)部擴展RAM.
當xdata地址大于0x6ff時, 會自動使用片外口擴展RAM.
嘗試使能片內(nèi)擴展RAM, 再試試memset操作.
可以看到, 是可以正常清掉xdata中定義的buf.
如果外掛的12864和外擴的XRAM都使用P0, P2, 那一定是有沖突的.
如果是自己畫的新板子, 可以考慮將12864用串行通訊, 將串口通訊用到的幾個引腳用閑散的GPIO來代替, 然后使用SPI的方式來通訊.
如果是使用已有的板子(e.g. 買的或自己做的STC15實驗箱4), 硬件沒辦法改. 此時只能是嘗試使能內(nèi)部擴展RAM.
當然, 如果xdata的地址超過0x6ff時, 還是會引起xdata操作失敗.
如果非要使用32KB的外掛XRAM, 必須要摘掉12864.
如果非要使用12864, 那么XRAM就只能使用內(nèi)部的擴展XRAM地址范圍(0x0~0x6ff), 外部掛的32KBXRAM就沒法用了.
因為STC使能內(nèi)部擴展RAM后, 如果地址超出0x6ff, 就會自動使用外接的32KB的XRAM, 所以不需要特意執(zhí)行ExternalRAM_enable().
ExternalRAM_enable()這個函數(shù)就是廢的, 沒有需求調(diào)用這個函數(shù).
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站標題:STC-同時外掛擴展RAM和12864時,C庫函數(shù)失效的問題-創(chuàng)新互聯(lián)
瀏覽地址:http://www.muchs.cn/article2/dpcpic.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、App開發(fā)、ChatGPT、企業(yè)建站、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)