打印

位操作奇怪的問題

[复制链接]
1557|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lurker_soo|  楼主 | 2007-8-28 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ST, TE, TI, ni, se
摘取其中的一部分程序如下:

           XDEF Entry              ; export 'Entry' symbol
            ABSENTRY Entry          ; for absolute assembly: mark this as application entry point

; include derivative specific macros
            INCLUDE 'qy4_registers.inc'



ORG    RAMStart         ; Insert here your data definition
;---------------Flag Register Block
FLAG1:           DS.B   1


            ORG    ROMStart
Entry:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
;            RSP
;-----------------------------------
        BCLR    0,FLAG1
;-----------------------------------            
           
;            JSR     InstructionStudy
            
            JMP     $

為什麼以上程序在軟件調試時,在執行到
BCLR    0,FLAG1
這一行指令時,出現如下錯誤提示:

Error: At location 0080 - 
Error: Attempt to use invalid or uninitialized memory
STEPPED

我所選用的MCU型號是:M68HC908QY4,$0080明明是RAM的超始地址,怎麼會:"invalid"

如果將程序改為如下,則不再提示錯誤:
            ORG    ROMStart
Entry:
            LDHX   #RAMEnd+1        ; initialize the stack pointer
            TXS
;            RSP
;-----------------------------------
            CLR     FLAG1
        BSET    0,FLAG1
;-----------------------------------            
             
            JMP     $

請問為什麼?

相关帖子

沙发
JerryBJ| | 2007-8-28 18:05 | 只看该作者

simulator

在软仿真(simulation)时,若操作的RAM没有被初始化过,则会有这个错误发生。而在硬件调试时,则没有。
你若在memory窗口中把0x80修改为一个数,此错误也不会发生。
这也提醒你,所有的RAM都应该在复位后初始化。

使用特权

评论回复
板凳
lurker_soo|  楼主 | 2007-8-28 21:09 | 只看该作者

原来是初始化的问题

谢谢楼上的!
因为FLAG1是用来存放位变量的,所以为了程序看起来更明了,就用BSET和BCLR一位一位地初始化。结果在软仿真时出现那个错误提示。
所以按照你的说法,在实际硬件运行时,不应该会出错吧。还没有直接将程序烧录到MCU去验证过。

使用特权

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

本版积分规则

9

主题

19

帖子

0

粉丝