[其他ST产品] ST72262G 在Release下,嵌入汇编编译出错

[复制链接]
3117|4
 楼主| macro08 发表于 2009-9-21 18:48 | 显示全部楼层 |阅读模式
各位大哥,小弟有一个问题搞了很久还是没有搞明白过来:

我把FLASH当做EEPROM用,在Release无法编译。在DEBUG下没有问题
报错:cost7: bad branch label 0x72,#0,EEPROM_Prog//

程序代码:
       void Copy_code_ram(void)
{
#asm
/*XemulE2_ByteProg:
  LD $f0,A ; Data to be programmed (00f0h) is in A
  LD 0xf1,X ; High address to be programmed (00f1h) in X
  LD 0xf2,Y ; Low address to be programmed (00f2h) in Y
  LD X,#$0C ; Copy programming software driver
bres 0,#1  ;// TEST
*/
ld x,#0x0c;
RAM_Copy:
LD A,(RAM_Driver,X)
  LD ($f3,X),A
  DEC X
  JRPL RAM_Copy
SIM //; Disable interrupts
  JP $f3 //; Call the programming driver located in RAM
#endasm
}

#pragma section (code_ram)
void code_ram_Driver(void)
{
#asm
RAM_Driver:
  BSET 0x72,#1 //; Enable Emul. EEPROM latches
  LD A, 0xf0
  LD [0xf1.w],A //; Set address/data to be programmed
  BSET 0x72,#0//; Launch the Emul. EEPROM programming
EEPROM_Prog:
nop
nop
  BTJT 0x72,#0,EEPROM_Prog//; Wait for end of programming (~5ms)
  RET
#endasm
}
#pragma section()
香水城 发表于 2009-9-21 18:54 | 显示全部楼层
这是出错的那句:BTJT 0x72,#0,EEPROM_Prog
试试看:BTJT 0x72.b,#0,EEPROM_Prog

另外,你这样直接指定变量地址0x72,很危险,极易与编译器分配的变量冲突。
 楼主| macro08 发表于 2009-9-22 08:42 | 显示全部楼层
0X72是 Flash Control Register,应该没有问题吧。
btjt dst,#pos,rel pos = [0..7], rel is relative jump label
e.g.: btjt PADR,#7,skip      我是按CPU的编程手册里面写的啊。
如果按你所说的做,还是会报错:cost7: bad branch label 0x72.0,#0,EEPROM_Prog//
 楼主| macro08 发表于 2009-9-22 08:43 | 显示全部楼层
我在DEBUG下,编译是没有问题的。
 楼主| macro08 发表于 2009-9-23 08:55 | 显示全部楼层
问题已经解决了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部