是ST-LINKII有BUG,还是我设置有问题?

tigerlikes   2007-12-26 17:19 楼主
就是样本里面的程序添加了sprintf函数, 下载在FLASH中调试器报错,但可以手工复位正常运行.
下载到RAM里面运行不正常,一会程序就跑飞了(短于10秒钟).

下面是整个工程打包文件,请帮忙验证.

LCDDemo.part01

LCDDemo.part02

LCDDemo.part03


https://bbs.eeworld.com.cn/upfiles/img/200712/2007122617841983.gif

回复评论 (31)

上面文件下载后改名成LCDDemo.part01,02,03就可以了

以为在debug();之前定义变量ST-LINK II不支持,把int j=0;char rgbhDisp[5];
定义成全局变量后,虽然下载到FLASH不再报错并且能正常运行,但下载到SRAM里面的程序还是运行出错.
点赞  2007-12-26 17:42

IAR FOR ARM 版本是Ev4.42a

                                  
点赞  2007-12-26 17:44

根据你的描述,很可能是你的堆栈溢出使程序跑飞

请注意SRAM的容量有限,你把程序放到RAM中运行,必然导致可用的数据变量的空间减小,堆栈也在SRAM中。

一种合理的解释是,你的堆栈已经溢出,在Flash中运行正常,是因为还有很大的RAM区没有用到,堆栈溢出没有破坏有用的程序和数据;而在SRAM中运行时就没有这么幸运了,RAM被压缩,堆栈溢出时破坏了有用的程序或数据。
点赞  2007-12-26 17:59

谢谢斑竹

1、使用的是万利的DEMO程序。
2、把栈放的很大还是有问题。
3、报错的时候程序还没有开始运行,仅仅是下载结束了。

点赞  2007-12-26 18:34

编译输出格式不对

在linker/output,把ALLOW C-SPY specific extra output file 构上
在linker/extra output,把generate extra output file钩上
点赞  2007-12-26 19:47

不是6楼说的问题,你说的两向都是正常的

您可以把上面的工程下载测试一下,谢谢。
点赞  2007-12-26 20:19

不是堆栈溢出,是存储器溢出了,更严重!

看看5楼贴出的截图:

15 332 bytes of CODE memory
19 880 bytes of DATA memory
 1 194 bytes of CONST memory

STM32最多就20K字节的RAM,你的代码用了15K,数据区用了近20K,当然会在下载时报错了,硬件存储器根本没有这么大!
点赞  2007-12-27 11:55

斑竹,5楼的图代码是在FLASH中啊

                                 呵呵
点赞  2007-12-27 12:00

可你在一楼说下载到Flash运行正常,下载到RAM里面运行不正常

另外,据我所知sprintf使用了可变参数传递,需要编译器很好支持,不知你从哪里搬来的sprintf,是否能够匹配我就不好说了。

既然是添加了sprintf函数后出问题,你还是在这个函数上找找原因吧。
点赞  2007-12-27 12:05

sprintf是IAR自身的标准函数啊

在项目中51、AVR、430都用它,从来没见过标准函数本身有问题。

对IAR标准函数的信任就象对ST芯片信任一样,不会轻易怀疑BUG的存在。
点赞  2007-12-27 12:11

并且仅仅是不能用ST-LINK II调试

下载到板子里面的程序运行还是稳定正常的。

其实要求有些高了,不到200元买的东西,能下载就好了 :-)
点赞  2007-12-27 12:15

我刚刚使用ST提供的GPIO例子测试过,没有问题

在程序中增加了下面的测试函数:

volatile int varA = 100;
char string[100];
void testing(void)
{
  sprintf(string, "This is varA = %d", varA);
}

然后在主循环前调用testing(),没发现问题。

我的开发工具是IAR EWARM 4.42A。
点赞  2007-12-27 12:33

不争论了

真正弄清楚这个原因估计要耗费很多时间。

显式的BUG是容易处理的,有些BUG往往是在特定条件下才能显现出来。
现在这个问题可能是万利光盘中的例程不适合添加sprintf函数(一般不会有问题,但毕竟我自己也没有认真研究过FWLib,有些规则不是很清晰,不敢说不是例程的问题),也可能是仿真器的BUG。

我一楼上面出问题的打包工程文件,和斑竹一样,也是使用了EWARM4.42A,两个版本(EWARM-KS-442A、EWARM-EV-442A)都试过了,显现出来的错误信息完全相同。
点赞  2007-12-27 12:44

上午虽然GPIO例子调通了,但真不明白门朝那边开---晕糊呀~~~

                                 看来和打拳一样,先研究研究对方的套路来~~~
点赞  2007-12-27 12:48

如果这样的话就好办了,等我们测试一下再说

                                 顺便问一下,LZ在用STM32做什么产品?
点赞  2007-12-27 12:52

回15楼:香功!

                                 哈哈~~~
点赞  2007-12-27 12:54

准备做记录仪表,嵌入多种通讯协议

                                  
点赞  2007-12-27 12:57

看到16楼关于多种通讯协议的问题,俺代表农友请个愿~~~

ST能否提供一个类似于串口控件MSCOMM,SPCOMM的驱动软件,分别供STM32和PC端使用.
这样就为我们这些USB驱动菜鸟做了件天大的善事~~~

这样我们可以用它下载程序和PC与STM32进行数据交换及通讯~~~

先谢谢了~~~
点赞  2007-12-27 13:08

我下载试了试,和你的描述不一样么

我可以下载到RAM,但是运行的时候,在液晶显示1000左右时,PC值会变成0xfffffff0,导致程序跑到HardFaultException()中,我没仔细看程序,但应该是你代码的问题吧。

在FLASH里运行倒是正常的。不过下载的时候出现过一次1楼描述的错误,但重起IAR之后就好了,这个可能是ST_LINK II和IAR的衔接还不是很好的关系吧,我猜的。。。
点赞  2007-12-27 13:17
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复