公告

非常抱歉,由于我们的服务器提供商硬盘出错,数据丢失,网站重建中...
I am so sorry, because of our server's hard disk error, data lost, the website reconstructioning
QQ:512000523
MSN : funchip@hotmail.com

 
首页 arrow 技术文章 arrow setp arrow AvrGCC修改程序放置地址
AvrGCC修改程序放置地址 Recommend to my friend via E-mail(推荐给朋友)
作者: Administrator   
2007-11-14

###########FunChip整理测试修编写########

A:我要写BootLoader程序,MakeFile应该怎么改写?

Q:

     在BootLoader 的程序编写中,就会遇到这样的问题,需要把我们的程序放到BOOT
区,而AVR 的BOOT 区的地址都在片内Flash 的尾部,这时候就需要改动Makefile 的
LDFLAGS 选项,即连接器选项(Linker Options)。
     在BootLoader 的程序中,一般而言,我们是将整个程序放到BOOT 区去,以Mega8
为例,编写的Bootoader 的时候,我们将片内Flash的后1K 空间作为BootLoader 空间,
起始地址为0x1C00,Makefile 的LDFLAGS 可以改成如下所示:

LDFLAGS = -Wl,-Map=$(TARGET).map,--section-start=.text=0x1C00,--cref

当然,如果你愿意的话,可以定义一个常量,来定位程序空间,比如:

#在此确定程序在Flash 中的存放地址
FLASHADDR = 0x1C00


这个时候,LDFLAGS 将要改成如下:
--section-start=.text=$(FLASHADDR)

在写一般应用的时候,将FLASHADDR 改成0x0000,而在写BootLoader 的时候改成0x1C00 即可

A:我如果要将一个函数放在特定的Flash地址,该然后操作?

Q:

     有时候,你如果需要把一些数据或者把某个函数定义到特定空间,这时候,仍然要
借助LDFLAGS 的帮助。一个简单的例子:
     #include <avr/io.h>
     #include <avr/pgmspace.h>
     #define LDFLAGSTEST __attribute__ ((section (".ldflagstest")))
     #define LDFLAGSDATA __attribute__ ((section (".ldflagsdata")))

     const unsigned char TDAT[2] LDFLAGSDATA = {0xcd, 0xce};
     void LDFLAGSTEST test(void)
     {
          asm("nop");
     }
     void main(void)
     {
          while(1);
     }


     MakeFile 的LDFLAGS 这样写:
     LDFLAGS = -Wl,-Map=$(TARGET).map,--section-start=.ldflagstest=0x0C00,--cref
     首先make clean 清除先前的编译结果,然后重新make all,结果如下:
                         Size after:
                         test.elf :
                         section size addr
                         .ldflagstest 4 3072
                         .text 102 0
                         .data 0 8388704
                         .bss 0 8388704
                         .noinit 0 8388704
                         .eeprom 0 8454144
                         .ldflagsdata 2 102
                         Total 108
     Test 函数被放到了3072(0x0C00)地址上,而TDAT 则被放到.text的尾端.

评论 (0)Add Comment

输入评论内容
quote
bold
italicize
underline
strike
url
image
quote
quote
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley

security code
输入验证码


busy
最近更新 ( 2007-11-18 )
 
< 上一篇   下一篇 >

© 2009 杭州福芯电子 浙ICP备05040812号
Joomla!是基于GNU/GPL许可发行的免费软件.