【MSP430 编译器使用经验】+将程序拷贝到RAM中执行
[复制链接]
1、首先使用IDE为IAR,当然这个说是编译器不太合适,针对IDE而言会合理些吧,暂且这么叫吧。
2、请先自行了解__low_level_init()函数,默认使用该文件的路径是X:\Program Files\IAR Systems\Embedded Workbench 6.0 Evaluation\430\src\lib\low_level_init.c 。
3、针对我们的应用,先拷贝出一份low_level_init.c放置到工程目录下面。
4、接下来我们添加一个汇编文件命名为Flash2RAM.asm或者.r43也可以的吧,我使用.asm后缀。
5、汇编代码如下:
PUBLIC FLASH_2_RAM
RSEG CODE
FLASH_2_RAM
PUSH.W R8
PUSH.W R9
PUSH.W R10
MOV #20H,R10
MOV #5C16H,R8
MOV #3C00H,R9
LOOP MOV @R8+,0(R9)
INCD R9
DEC R10
JNZ LOOP
POP.W R10
POP.W R9
POP.W R8
RET
END
6、修改low_level_init.c文件如下:
extern void FLASH_2_RAM(void);
int __low_level_init(void)
{
WDTCTL = WDTPW | WDTHOLD;
FLASH_2_RAM();
asm("mov #3C00h,R0");
return 1;
}
此处在cStart之前把Flash中的程序拷贝到RAM中,注意针对的MCU型号为MSP430F5438,其他的型号修改相关的FLASH和RAM首地址即可。
注意这里在拷贝结束后把指针强制指向RAM中即可。
7、实测程序,非转载欢迎大家测试。
8、针对一款MCU而言,如果你选择某款IDE作为开发环境,建议要搞清楚一些基本的知识点,启动过程,cstart过程都做了哪些事情,linker的细节问题。如果你用开源的编译器来建立一个工程的话,相信你会了解其中的种种,MSP430有开源的gcc编译器哦,大家可以玩玩。
|