C51编程:各位DX请进,
工作环境是这样:MCU是8052,外部ROM和外部RAM都放在芯片ZPSD813F1上。
写了下面一段程序:
void FlashErase() //擦除ZPSD813F1中的FLASH,该FLASH是作外部RAM用的。
{
//激活ZPSD813F1的内部Flash擦除算法
//检测ZPSD813F1的状态寄存器,等待算法执行完成
}
void Comm()
{
...
FlashErase();
...
}
在实际执行时发现,在调用完FlashErase()后,程序经常跑到一个不可预知的地方,当
然也可能返回到Comm()继续执行。
我在论坛上问了一些大侠,有的说是堆栈不够用,我也不知道怎么检查,经过修改将堆
栈栈底从0x3C提高到0x23,但是问题依然没有解决。而且在程序中有些地方函数的调用深度
彼此处还深,也没出现问题。后来我将FlashErase()改称宏的形式,问题依然存在。
这是否与此有关:FlashErase()调用芯片ZPSD813F1的内部算法,而程序代码也在该芯片
内。这是否有冲突。
为了发现问题所在,我在FalshErase()中,在激活ZPSD813F1的内部算法后,在等待之前
和等待期间我都输出了一些提示信息,但每次执行时,都没有发现这些提示信息,然后程序
就返回到Comm()继续执行或着返回到一个不可预知的地方。理论知识有限,对此我不知道怎
么解释。
各位有经验有理论的大侠们给点提示和展开讨论一下吧。
发表时间:2002年10月11日14:29:00