在线时间0 小时
UID366098
注册时间2012-6-21
NXP金币0
该用户从未签到
新手上路

- 积分
- 111
- 最后登录
- 1970-1-1
|
发表于 2012-10-24 12:23:23
|
显示全部楼层
回复:关于MC9S08DZ60通过CAN总线升级程序的思路框架
回复第 23 楼 于2012-10-24 10:11:45发表:
回复第 18 楼 于2012-10-22 23:15:50发表:
回复第 17 楼 于2012-10-20 17:11:22发表:
回复第 14 楼 于2012-10-19 14:33:00发表:
回复第 12 楼 于2012-10-18 17:25:40发表:
回复第 11 楼 于2012-10-18 16:57:24发表:
回复第 10 楼 于2012-10-18 08:45:06发表:
1、这段代码是保存在ROM,也就是FLASH中。只有在调用的时候才会将他COPY到RAM中执行,所以FLASH中存在该段CODE。
2、理解上面的意思,就明白了,该段代码不会丢失。
谢谢,我通过看S19文件 验证了你的说法!
Thank
你好,我用如下方式能完成Code 在调用的时候将他COPY到RAM中执行吗??
BOOT_CODE = READ_ONLY 0xF000 TO 0xF9FF RELOCATE_TO 0x3400;
我之前做过一个类似的,RELOCATE_TO 是地址重定位,prm文件里应该这样设置, 但还应在主函数里的擦除前加上拷贝代码函数,函数及涉及到的宏如下
#define __SEG_START_REF(a) __SEG_START_ ## a
#define __SEG_END_REF(a) __SEG_END_ ## a
#define __SEG_SIZE_REF(a) __SEG_SIZE_ ## a
#define __SEG_START_DEF(a) extern signed char __SEG_START_REF (a) []
#define __SEG_END_DEF(a) extern signed char __SEG_END_REF (a) []
#define __SEG_SIZE_DEF(a) extern signed char __SEG_SIZE_REF (a) []
__SEG_START_DEF (RAM_CODE);
__SEG_END_DEF (RAM_CODE);
__SEG_SIZE_DEF (RAM_CODE);
static void CopyCodeToRAM(void)
{
Uint8 *Src;
Uint8 *Dst;
Uint16 SegSize;
Uint16 x;
//RAM code resides in Flash from 0xfb00 - 0xfeff
Src = (Uint8 *)__SEG_START_REF(RAM_CODE);
//code will be copied to RAM at address 0x3D00
Dst = (Uint8 *)0x3D00;
SegSize = (Uint16)__SEG_SIZE_REF(RAM_CODE);
for (x = 0; x < SegSize; x++) //just copy a byte at a time
*Dst++ = *Src++;
}
我这里RAM_CODE是要需要代码重定位的段名,我的prm这样定义:
SEGMENTS
RAM = READ_WRITE 0x3900 TO 0x3CFF;
RAM_CODE_SEG = READ_ONLY 0xFD00 TO 0xFEFF RELOCATE_TO 0x3D00;
ROM_F000 = READ_ONLY 0xF000 TO 0xFCFF;
END
PLACEMENT /* here all predefined and user segments are placed into the SEGMENTS defined above. */
ROM_VAR,
STRINGS,
DEFAULT_ROM,
NON_BANKED INTO ROM_F000;
DEFAULT_RAM INTO RAM;
RAM_CODE INTO RAM_CODE_SEG;
END
你好,
我编写一简单代码,在没有加入 RELOCATE_TO 以前,代码能运行; 当加入RELOCATE_TO 后,代码不能运行;在启动函数中,main函数运行之前加入void CopyCodeToRAM(void)函数, 代码还是不能运行; 是CopycodeToRAM()函数添加的位置不对吗?
还请指教。
谢谢
在main函数中初始化之后,传数据之前,调用CopyCodeToRAM(void)函数
你好 ,
我使用的编译器Code Warrier . 按你所说的还是不能运行, 请问 还有一些其他的注意事项吗?
我也是用Code Warrier ,不知道你的怎么不能运行,报什么错? |
|