1.ATMega16+CH375做U盤(pán)讀寫(xiě)程序,只用512Byte RAM可以嗎? 2.用ATmega16+CH375 編譯環(huán)境:ICCAVR V7.22 程序庫(kù):CH375LIB\AVR\FILELIBB\CH375HFB.A + CH375HFB.H 編譯時(shí)通不過(guò) 3.直接只用CH375LIB\AVR\FILELIBB\EXAM1\CH375HFT.C + CH375HFB.A + CH375HFB.H 這三個(gè)文件組成項(xiàng)目來(lái)編譯,MCU選擇為:ATMega128 :M103 mode 編譯還是通不過(guò)? 其中只在CH375HFT.C中修改了一句 #include "..\CH375HFB.H"改為 #include "CH375HFB.H"
1:不可以。 2:用這個(gè)庫(kù)來(lái)實(shí)驗(yàn)一下CH375LIB\AVR\FILELIBB_V7,F(xiàn)ILELIBB是ICC 6.31的版本 3:編譯不通過(guò)出現(xiàn)的錯(cuò)誤提示是什么?
1.我問(wèn)的是DISK_BASE_BUF[ ] 和FILE_DATA_BUF[ ] 能否共用512個(gè)字節(jié),使得用戶程序里還有一部分RAM可用。 版主說(shuō)“不可以”是指這種方式不可以,還是指...? ATMega16的程序flash[16K]應(yīng)該夠了?是指RAM不夠? 2.改用CH375LIB\AVR\FILELIBB_V7下的庫(kù)及頭文件可以編譯通過(guò) 3.同樣改用CH375LIB\AVR\FILELIBB_V7下的庫(kù)及頭文件(先前出錯(cuò),可能跟2是同樣原因),編譯還有錯(cuò)誤。 錯(cuò)誤如下: !ERROR Function 'putchar' not defined. This is a hardware dependent function, and it is not included in the ICCAVR default library. Please implement this function to match your target requirements. You can find examples of this function under the \examples.AVR directory. Make a copy of a suitable example, add it to your project and modify it if needed. The source code must #include the appropriate C header file (e.g. stdio.h) as it contains the special compiler pragma for 'putchar'. 看了一下,程序里沒(méi)有用到putchar函數(shù),而且 已經(jīng)包含了頭文件 #include 為什么還要提示出錯(cuò)?
多謝!
可以共用。如果用ICC編譯器的話,程序空間危險(xiǎn),除了庫(kù)之外還有用戶代碼。你可以使用IAR編譯器,會(huì)節(jié)省一些空間?;蛘哌x用CH376芯片。
用CH376芯片包含了所有CH375的功能? 看了一下datasheet,CH376S與CH375在并口方式下23腳的定義差異, 可以讓CH376S的23腳直接接地(并口,讀寫(xiě)U盤(pán)功能)?這樣不用改PCB了
另外問(wèn)一下,用CH376S的話實(shí)現(xiàn)U盤(pán)基本的讀寫(xiě),大體上能比CH375節(jié)省多少空間?
引腳不需要修改,CH376讀寫(xiě)U盤(pán)的程序空間在2-3K字節(jié)
在用戶程序中定義了 #define DISK_BASE_BUF_LEN 0 #define FILE_DATA_BUF_LEN 0x0200
編譯時(shí),還是說(shuō)RAM不夠,為什么? 庫(kù)文件中還有大量使用RAM的全局變量嗎?
#define DISK_BASE_BUF_LEN 0 不能這樣定義,DISK_BASE_BUF_LEN最小為512.可以不定義 #define FILE_DATA_BUF_LEN 0x0200 這個(gè)不要定義。 除了這512個(gè)字節(jié)之外,還有一些全局變量需要使用,大概一共600多個(gè)字節(jié)(包含DISK_BASE_BUF_LEN 512) 以上說(shuō)的是庫(kù)需要的資源,EXAM程序里所用的RAM不包含,比如printf,一些變量會(huì)占用RAM。如果你用M16,推薦你使用CH376。
謝謝回復(fù) 正式的程序里我會(huì)選擇更大的MCU,或者選用CH376。
現(xiàn)在的提問(wèn)是為了更好的理解如何使用好庫(kù)函數(shù)
我是想用M16先把程序簡(jiǎn)單跑起來(lái)
不定義FILE_DATA_BUF_LEN也就意味著不定義FILE_DATA_BUF? 這樣讀寫(xiě)就使用CH375FileReadX( ) CH375FileWriteX( ),調(diào)用前自己指定緩沖區(qū), 這個(gè)理解對(duì)嗎?
另外,我有個(gè)問(wèn)題想請(qǐng)教: 我發(fā)現(xiàn)用戶程序里定義了一個(gè)數(shù)組,占用了大量的RAM const unsigned char Lib[ 80 ][ 5 ]; 我的本意是想將其定義在程序存儲(chǔ)器中的,就像C51中的unsigned char code Lib[ 80 ] [ 5 ]; 但不知道怎么定義。本以為“const”就可以,但看來(lái)不是這樣,請(qǐng)指點(diǎn)
關(guān)于緩沖區(qū)共復(fù)用,請(qǐng)下載CH375EVT.ZIP,請(qǐng)參考:CH375\EVT\MCS51C\FILELIB4\EXAM3 關(guān)于const的定義,這主要和ICC編譯器有關(guān),如果沒(méi)記錯(cuò)的話,按照下面定義: unsigned char const Lib[ 80 ] [ 5 ]; 就是定義的程序存儲(chǔ)區(qū)。code關(guān)鍵字肯定是不支持的。 你查閱一下相關(guān)資料。
CH375\EVT\MCS51C\FILELIB4\EXAM3中的例子,我在MCS51中用過(guò)了
C51中是將FILE_DATA_BUF 和DISK_BASE_BUF定義在同一個(gè)地址下
ATmega16中怎么定義?。?/p>
你可以不定義FILE_DATA_BUF,寫(xiě)文件的時(shí)候?qū)⒅羔樦苯又赶駾ISK_BASE_BUF不就可以了嗎? FILE_DATA_BUF和DISK_BASE_BUF不就是個(gè)指針嗎? 其他的用法是一樣的。
沒(méi)有定義FILE_DATA_BUF_LEN 編譯時(shí),缺少了兩個(gè)函數(shù):xWriteToExtBuf xReadFromExtBuf 看了頭文件里說(shuō)明,說(shuō)這兩個(gè)函數(shù)沒(méi)有用,于是在用戶程序里自己定義了一下
好像OK了