|
发表于 2008-6-11 10:39:16
|
显示全部楼层
希望这个对你有点启发,我在21IC跟一网友的讨论.
http://bbs.21ic.com/club/bbs/list.asp?boardid=27&page=2&t=2978728&tp=%u60F3%u505A%u4E00%u4E2A%u7A0B%u5E8F%u53EF%u4EE5%u66F4%u65B0%u7684%u7A0B%u5E8F
PICC18可以向下兼容PIC16的设计吗?
答:不好意思,这个我不清楚,才接触PIC才两个月.
那个Specify offset for ROM是针对一个工程而言吧?
答:是的.
是不是应该创建两个工程分别编写功能程序和引导程序,然后要怎么做?
答:是的,可看链接上的例子,你应该会明白bootloaser是怎么一回事.
分别将两个工程编译成两个.hex文件,然后手工合为一个.hex文件?
答:可以,你可以先了解hex的格式.hex码表达的意思是指某地址上储存的数据(数
据就是程序编译后生成的MCU可执行的机器码),那么引导程序生成的数据位于
0x000-0x4ff地址上,功能程序位于0x500-0x1000地址上,然后我们把两者是可以合
并在一起,即把位于0x500-0x1000地址上数据插入到引导程序的hex文件中,生成一
个hex文件,再通过ICD2直接把这个合并后的hex文件烧写进去.已测试过,绝非乱说
,有空为这个主题写篇blog给大家拍拍砖.
能不能通过链接器将所有的.obj文件链接生成一个.hex文件?(不过好像每一个
源文件都会生成一个对应的.obj文件,不知这样操作是否可行)
答:你可以先了解一下链接器的功能.
如果手工将两个.hex合成一个.hex文件,还涉及到一个问题是,0000-0003地址的
程序会跳转到哪里?(0004是中断向量)功能程序和引导程序分为两个project,
各自编译后跳转的地址肯定不一样。0000-0003的跳转程序要在什么地方更改?
答:我们可以重新设置功能程序的中断向量,具体可看链接上说的;
复位向量也可以自己定义,用软跳转的办法,即(*((void(*)(void))Address))();
引导程序不要使用中断,仅采取查询方式. |
|