[KeilC51求助]<请教logu>为什么会这样?单片板子上挂了51和一块存储器。
我写了一个小程序在上面运行,开始时在keil中选择用small模式来编译程序,在板子上可以正常运行(我在keil的项目生成时没有选择加入startup.a51文件)。
后来改用large模式来编译,出现了一个问题:有一个函数在startup.a51文件和我的主程序中都调用了,keil的提示出现一个警告:multicall
to
segment。看来keil自己把startup文件加入了项目(我猜想是不是要初始化外部存储器的缘故)。于是修改startup文件里定义的堆栈起始地址和长度为我板子上的存储器情况。另外把被重复调用的函数定义为reentrant类型,编译通过了,但是运行程序时跑飞了,不理解。
后来把反汇编文件拿出来看了一下,发现在进行reentrant型函数的模拟堆栈操作时,居然用到了mov
dptr,#0ffff,后面一句看不懂,估计是把reentrant型函数的模拟堆栈搞到了#0ffff位置,但是我定义的存储器根本没有到那里啊,为什么用到了那里呢?
