按照手册上,链接二进制数据文件foo.bin到目标程序中,存放到FLASH里,命令是:
avr-objcopy --rename-section .data=.progmem.data,contents,alloc,load,readonl
y,data -I binary -O elf32-avr foo.bin foo.o
AVR Studio的项目配置里可以添加目标文件foo.o, 也可以修改Makefile,把这些加
进去。
foo.o里会包含3个符号:_binary_foo_bin_start,_binary_foo_bin_end,_binary_fo
o_bin_size.
再链接到ELF目标中后,用avr-nm可以看到他们的类型分别是:T(.text段),T(.tex
t段),A(绝对符号)
但怎么引用这几个符号倒没说,它们是代码段符号,没有空间只有值,怎么访问它们的
值?尤其是size这个A类型的符号。
试了半天终于成功了,就是像这样声明:
extern char _binary_foo_bin_start[] PROGMEM;
extern char _binary_foo_bin_end[] PROGMEM; // 这个一般用不到吧
extern char _binary_foo_bin_size[] PROGMEM;
然后我定义了
PGM_P data = _binary_foo_bin_start;
int len = (int)_binary_foo_bin_size;
之后就可以用pgm_read_byte()来读数据了。
不知道有没有其它声明的办法?
阅读(826) | 评论(0) | 转发(0) |