就是样本里面的程序添加了sprintf函数, 下载在FLASH中调试器报错,但可以手工复位正常运行.
下载到RAM里面运行不正常,一会程序就跑飞了(短于10秒钟).
下面是整个工程打包文件,请帮忙验证.
LCDDemo.part01LCDDemo.part02LCDDemo.part03https://bbs.eeworld.com.cn/upfiles/img/200712/2007122617841983.gif
上面文件下载后改名成LCDDemo.part01,02,03就可以了
以为在debug();之前定义变量ST-LINK II不支持,把int j=0;char rgbhDisp[5];
定义成全局变量后,虽然下载到FLASH不再报错并且能正常运行,但下载到SRAM里面的程序还是运行出错.
根据你的描述,很可能是你的堆栈溢出使程序跑飞
请注意SRAM的容量有限,你把程序放到RAM中运行,必然导致可用的数据变量的空间减小,堆栈也在SRAM中。
一种合理的解释是,你的堆栈已经溢出,在Flash中运行正常,是因为还有很大的RAM区没有用到,堆栈溢出没有破坏有用的程序和数据;而在SRAM中运行时就没有这么幸运了,RAM被压缩,堆栈溢出时破坏了有用的程序或数据。
谢谢斑竹
1、使用的是万利的DEMO程序。
2、把栈放的很大还是有问题。
3、报错的时候程序还没有开始运行,仅仅是下载结束了。
编译输出格式不对
在linker/output,把ALLOW C-SPY specific extra output file 构上
在linker/extra output,把generate extra output file钩上
不是6楼说的问题,你说的两向都是正常的
您可以把上面的工程下载测试一下,谢谢。
不是堆栈溢出,是存储器溢出了,更严重!
看看5楼贴出的截图:
15 332 bytes of CODE memory
19 880 bytes of DATA memory
1 194 bytes of CONST memory
STM32最多就20K字节的RAM,你的代码用了15K,数据区用了近20K,当然会在下载时报错了,硬件存储器根本没有这么大!
可你在一楼说下载到Flash运行正常,下载到RAM里面运行不正常
另外,据我所知sprintf使用了可变参数传递,需要编译器很好支持,不知你从哪里搬来的sprintf,是否能够匹配我就不好说了。
既然是添加了sprintf函数后出问题,你还是在这个函数上找找原因吧。
sprintf是IAR自身的标准函数啊
在项目中51、AVR、430都用它,从来没见过标准函数本身有问题。
对IAR标准函数的信任就象对ST芯片信任一样,不会轻易怀疑BUG的存在。
并且仅仅是不能用ST-LINK II调试
下载到板子里面的程序运行还是稳定正常的。
其实要求有些高了,不到200元买的东西,能下载就好了 :-)
我刚刚使用ST提供的GPIO例子测试过,没有问题
在程序中增加了下面的测试函数:
volatile int varA = 100;
char string[100];
void testing(void)
{
sprintf(string, "This is varA = %d", varA);
}
然后在主循环前调用testing(),没发现问题。
我的开发工具是IAR EWARM 4.42A。
不争论了
真正弄清楚这个原因估计要耗费很多时间。
显式的BUG是容易处理的,有些BUG往往是在特定条件下才能显现出来。
现在这个问题可能是万利光盘中的例程不适合添加sprintf函数(一般不会有问题,但毕竟我自己也没有认真研究过FWLib,有些规则不是很清晰,不敢说不是例程的问题),也可能是仿真器的BUG。
我一楼上面出问题的打包工程文件,和斑竹一样,也是使用了EWARM4.42A,两个版本(EWARM-KS-442A、EWARM-EV-442A)都试过了,显现出来的错误信息完全相同。
上午虽然GPIO例子调通了,但真不明白门朝那边开---晕糊呀~~~
看来和打拳一样,先研究研究对方的套路来~~~
如果这样的话就好办了,等我们测试一下再说
顺便问一下,LZ在用STM32做什么产品?
看到16楼关于多种通讯协议的问题,俺代表农友请个愿~~~
ST能否提供一个类似于串口控件MSCOMM,SPCOMM的驱动软件,分别供STM32和PC端使用.
这样就为我们这些USB驱动菜鸟做了件天大的善事~~~
这样我们可以用它下载程序和PC与STM32进行数据交换及通讯~~~
先谢谢了~~~
我下载试了试,和你的描述不一样么
我可以下载到RAM,但是运行的时候,在液晶显示1000左右时,PC值会变成0xfffffff0,导致程序跑到HardFaultException()中,我没仔细看程序,但应该是你代码的问题吧。
在FLASH里运行倒是正常的。不过下载的时候出现过一次1楼描述的错误,但重起IAR之后就好了,这个可能是ST_LINK II和IAR的衔接还不是很好的关系吧,我猜的。。。