Chinaunix首页 | 论坛 | 博客
  • 博客访问: 55054
  • 博文数量: 12
  • 博客积分: 480
  • 博客等级: 下士
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-15 13:42
文章分类
文章存档

2010年(3)

2009年(2)

2008年(7)

我的朋友

分类:

2008-03-25 10:36:59

按照手册上,链接二进制数据文件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) |
给主人留下些什么吧!~~