打印
[开发工具]

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

[复制链接]
7970|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
makesoft|  楼主 | 2007-12-26 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
就是样本里面的程序添加了sprintf函数, 下载在FLASH中调试器报错,但可以手工复位正常运行.
下载到RAM里面运行不正常,一会程序就跑飞了(短于10秒钟).

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

LCDDemo.part01

LCDDemo.part02

LCDDemo.part03


https://bbs.21ic.com/upfiles/img/200712/2007122617841983.gif
沙发
makesoft|  楼主 | 2007-12-26 17:42 | 只看该作者

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

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

使用特权

评论回复
板凳
makesoft|  楼主 | 2007-12-26 17:44 | 只看该作者

IAR FOR ARM 版本是Ev4.42a

使用特权

评论回复
地板
香水城| | 2007-12-26 17:59 | 只看该作者

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

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

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

使用特权

评论回复
5
makesoft|  楼主 | 2007-12-26 18:34 | 只看该作者

谢谢斑竹

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

使用特权

评论回复
6
ATmega16| | 2007-12-26 19:47 | 只看该作者

编译输出格式不对

在linker/output,把ALLOW C-SPY specific extra output file 构上
在linker/extra output,把generate extra output file钩上

使用特权

评论回复
7
makesoft|  楼主 | 2007-12-26 20:19 | 只看该作者

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

您可以把上面的工程下载测试一下,谢谢。

使用特权

评论回复
8
香水城| | 2007-12-27 11:55 | 只看该作者

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

看看5楼贴出的截图:

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

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

使用特权

评论回复
9
makesoft|  楼主 | 2007-12-27 12:00 | 只看该作者

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

呵呵

使用特权

评论回复
10
香水城| | 2007-12-27 12:05 | 只看该作者

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

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

既然是添加了sprintf函数后出问题,你还是在这个函数上找找原因吧。

使用特权

评论回复
11
makesoft|  楼主 | 2007-12-27 12:11 | 只看该作者

sprintf是IAR自身的标准函数啊

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

对IAR标准函数的信任就象对ST芯片信任一样,不会轻易怀疑BUG的存在。

使用特权

评论回复
12
makesoft|  楼主 | 2007-12-27 12:15 | 只看该作者

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

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

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

使用特权

评论回复
13
香水城| | 2007-12-27 12:33 | 只看该作者

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

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

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

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

我的开发工具是IAR EWARM 4.42A。

使用特权

评论回复
14
makesoft|  楼主 | 2007-12-27 12:44 | 只看该作者

不争论了

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

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

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

使用特权

评论回复
15
hotpower| | 2007-12-27 12:48 | 只看该作者

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

看来和打拳一样,先研究研究对方的套路来~~~

使用特权

评论回复
16
香水城| | 2007-12-27 12:52 | 只看该作者

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

顺便问一下,LZ在用STM32做什么产品?

使用特权

评论回复
17
香水城| | 2007-12-27 12:54 | 只看该作者

回15楼:香功!

哈哈~~~

使用特权

评论回复
18
makesoft|  楼主 | 2007-12-27 12:57 | 只看该作者

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

使用特权

评论回复
19
hotpower| | 2007-12-27 13:08 | 只看该作者

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

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

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

先谢谢了~~~

使用特权

评论回复
20
vigia| | 2007-12-27 13:17 | 只看该作者

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

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

在FLASH里运行倒是正常的。不过下载的时候出现过一次1楼描述的错误,但重起IAR之后就好了,这个可能是ST_LINK II和IAR的衔接还不是很好的关系吧,我猜的。。。

使用特权

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

本版积分规则

30

主题

296

帖子

0

粉丝