在AVR库下的头文件中对DISK_BASE_BUF做了如下定义:UINT8 DISK_BASE_BUF[512]; 我想问的是对于没有外扩RAM的ATmega32(只用其片内的2KRAM)这样一句定义会将这个缓冲区定义在这2K的什么地址上呢?是做一个随机分配吗?如果不是的话是不是我应当给DISK_BASE_BUF指定一个起始地址呢?对于file_data_buf有一样的疑问!请指点迷津,谢谢!!
应该是随即分配的,实际上你也可以把RAM定义在固定的地址的
我在库的头文件中做了如下改动:
CMD_PARAM_I mCmdParam; /* 命令参数 */
//UINT8 DISK_BASE_BUF[512]; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度,起始地址建议为偶地址 */ //#ifdef FILE_DATA_BUF_LEN //UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ]; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,起始地址建议为偶地址 */
#ifdef DISK_BASE_BUF_ADDR UINT8 DISK_BASE_BUF[512] _at_ DISK_BASE_BUF_ADDR; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #else UINT8 DISK_BASE_BUF[512]; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #endif #ifdef FILE_DATA_BUF_LEN #ifdef FILE_DATA_BUF_ADDR UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ] _at_ FILE_DATA_BUF_ADDR; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */ #else UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ]; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */
主程序中:
#define DISK_BASE_BUF_ADDR 0x0100
#define FILE_DATA_BUF_LEN 0x0200 #define FILE_DATA_BUF_ADDR 0x0300
hcn大哥看这样总可以了吧? 另外多谢大哥这几天的指点,麻烦您了!!
我在库的头文件中做了如下改动:
CMD_PARAM_I mCmdParam; /* 命令参数 */
//UINT8 DISK_BASE_BUF[512]; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度,起始地址建议为偶地址 */ //#ifdef FILE_DATA_BUF_LEN //UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ]; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,起始地址建议为偶地址 */
#ifdef DISK_BASE_BUF_ADDR UINT8 DISK_BASE_BUF[512] _at_ DISK_BASE_BUF_ADDR; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #else UINT8 DISK_BASE_BUF[512]; /* 外部RAM的磁盘数据缓冲区,缓冲区长度为一个扇区的长度 */ #endif #ifdef FILE_DATA_BUF_LEN #ifdef FILE_DATA_BUF_ADDR UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ] _at_ FILE_DATA_BUF_ADDR; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */ #else UINT8 FILE_DATA_BUF[ FILE_DATA_BUF_LEN ]; /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */
主程序中:
#define DISK_BASE_BUF_ADDR 0x0100
#define FILE_DATA_BUF_LEN 0x0200 #define FILE_DATA_BUF_ADDR 0x0300
hcn大哥看这样总可以了吧? 另外多谢大哥这几天的指点,麻烦您了!!
你的这个定义不正确,要定义地址的话,实际上你可以用ICC编译器自动生成这个地址,按照你说的这样定义的话,你编译的时候有可能会出错
为什么会出错啊?我这种定义是参照C51库的头文件来的,而且编译的时候也没有报错啊?用ICC编译器自动生成我还不知道怎么做,现在就去查一下!!
AVR的地址定义和51的是不一样的