1.ATMega16+CH375做U盘读写程序,只用512Byte RAM可以吗? 2.用ATmega16+CH375 编译环境:ICCAVR V7.22 程序库:CH375LIB\AVR\FILELIBB\CH375HFB.A + CH375HFB.H 编译时通不过 3.直接只用CH375LIB\AVR\FILELIBB\EXAM1\CH375HFT.C + CH375HFB.A + CH375HFB.H 这三个文件组成项目来编译,MCU选择为:ATMega128 :M103 mode 编译还是通不过? 其中只在CH375HFT.C中修改了一句 #include "..\CH375HFB.H"改为 #include "CH375HFB.H"
1:不可以。 2:用这个库来实验一下CH375LIB\AVR\FILELIBB_V7,FILELIBB是ICC 6.31的版本 3:编译不通过出现的错误提示是什么?
1.我问的是DISK_BASE_BUF[ ] 和FILE_DATA_BUF[ ] 能否共用512个字节,使得用户程序里还有一部分RAM可用。 版主说“不可以”是指这种方式不可以,还是指...? ATMega16的程序flash[16K]应该够了?是指RAM不够? 2.改用CH375LIB\AVR\FILELIBB_V7下的库及头文件可以编译通过 3.同样改用CH375LIB\AVR\FILELIBB_V7下的库及头文件(先前出错,可能跟2是同样原因),编译还有错误。 错误如下: !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'. 看了一下,程序里没有用到putchar函数,而且 已经包含了头文件 #include 为什么还要提示出错?
多谢!
可以共用。如果用ICC编译器的话,程序空间危险,除了库之外还有用户代码。你可以使用IAR编译器,会节省一些空间。或者选用CH376芯片。
用CH376芯片包含了所有CH375的功能? 看了一下datasheet,CH376S与CH375在并口方式下23脚的定义差异, 可以让CH376S的23脚直接接地(并口,读写U盘功能)?这样不用改PCB了
另外问一下,用CH376S的话实现U盘基本的读写,大体上能比CH375节省多少空间?
引脚不需要修改,CH376读写U盘的程序空间在2-3K字节
在用户程序中定义了 #define DISK_BASE_BUF_LEN 0 #define FILE_DATA_BUF_LEN 0x0200
编译时,还是说RAM不够,为什么? 库文件中还有大量使用RAM的全局变量吗?
#define DISK_BASE_BUF_LEN 0 不能这样定义,DISK_BASE_BUF_LEN最小为512.可以不定义 #define FILE_DATA_BUF_LEN 0x0200 这个不要定义。 除了这512个字节之外,还有一些全局变量需要使用,大概一共600多个字节(包含DISK_BASE_BUF_LEN 512) 以上说的是库需要的资源,EXAM程序里所用的RAM不包含,比如printf,一些变量会占用RAM。如果你用M16,推荐你使用CH376。
谢谢回复 正式的程序里我会选择更大的MCU,或者选用CH376。
现在的提问是为了更好的理解如何使用好库函数
我是想用M16先把程序简单跑起来
不定义FILE_DATA_BUF_LEN也就意味着不定义FILE_DATA_BUF? 这样读写就使用CH375FileReadX( ) CH375FileWriteX( ),调用前自己指定缓冲区, 这个理解对吗?
另外,我有个问题想请教: 我发现用户程序里定义了一个数组,占用了大量的RAM const unsigned char Lib[ 80 ][ 5 ]; 我的本意是想将其定义在程序存储器中的,就像C51中的unsigned char code Lib[ 80 ] [ 5 ]; 但不知道怎么定义。本以为“const”就可以,但看来不是这样,请指点
关于缓冲区共复用,请下载CH375EVT.ZIP,请参考:CH375\EVT\MCS51C\FILELIB4\EXAM3 关于const的定义,这主要和ICC编译器有关,如果没记错的话,按照下面定义: unsigned char const Lib[ 80 ] [ 5 ]; 就是定义的程序存储区。code关键字肯定是不支持的。 你查阅一下相关资料。
CH375\EVT\MCS51C\FILELIB4\EXAM3中的例子,我在MCS51中用过了
C51中是将FILE_DATA_BUF 和DISK_BASE_BUF定义在同一个地址下
ATmega16中怎么定义啊?
你可以不定义FILE_DATA_BUF,写文件的时候将指针直接指向DISK_BASE_BUF不就可以了吗? FILE_DATA_BUF和DISK_BASE_BUF不就是个指针吗? 其他的用法是一样的。
没有定义FILE_DATA_BUF_LEN 编译时,缺少了两个函数:xWriteToExtBuf xReadFromExtBuf 看了头文件里说明,说这两个函数没有用,于是在用户程序里自己定义了一下
好像OK了