最近在学习MSP430的在线升级。方式是这样的:MSP430与无线WIFI芯片通过UART通讯,升级文件有上位机软件通过TCP/IP协议发送给无线WIFI芯片,再通过UART发送给MSP430。
预先修改了lnk430F5309.xcl
// Constant data
-Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=A7FF-FF7F
// Code
-Z(CODE)UPDATECODE=A000-A7FF // 升级程序
-Z(CODE)CSTART,ISR_CODE,CODE_ID=A7FF-FF7F
-P(CODE)CODE=A7FF-FF7F //应用程序
-Z(CODE)MYRESET=FF7C-FF7D //升级标志
-Z(CODE)MYCHECK=FF7E-FF7F //升级成功标志 (因为无外置大容量EEPROM不得不加的)
// Interrupt vectors
-Z(CODE)INTVEC=FF80-FFFF
-Z(CODE)RESET=FFFE-FFFF
MSP430启动后执行代码
void main( void )@"UPDATECODE"
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
if(*(unsigned int*)UPDATEADDR==0xFFFF)update();
Application();
while(1);
}
update.c如下
__monitor void update(void)@"UPDATECODE"
{
if(OU_check())
{
OU_gsServerStart();
}
OU_gsUpdate(); }
void OU_gsServerStart(void)@"UPDATECODE"
{
OU_sendstr("at
");
delay_ms(100);
}
char OU_check(void)@"UPDATECODE"
{
if(*(unsigned int *)UPDATESUCESS==0xFFFF)
{
return 1;
}
else
{
return 0;
}
}
问题如下:
OU_gsServerStart 中“at
”作为const类型 是存储在应用程序空间CODE下 还是升级程序空间UPDATECODE下?
此帖出自
小平头技术问答
-Z(CONST)UPDATEDATA=A000-A7FF
一周热门 更多>