打印
[其他ST产品]

ST72262G 在Release下,嵌入汇编编译出错

[复制链接]
2336|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下,编译是没有问题的。

使用特权

评论回复
5
macro08|  楼主 | 2009-9-23 08:55 | 只看该作者
问题已经解决了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

9

帖子

0

粉丝