你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求大神帮我解决调试问题

[复制链接]
zi约 提问时间:2017-8-5 16:19 /
悬赏3ST金币未解决
这个是一个测试RAM的代码,我运行一个有这个代码的函数,出函数时就会跳入HardFault_Handler(),一直找不到什么原因,求各位大神帮我分析下。。。

QQ图片20170805161030.png
收藏 评论41 发布时间:2017-8-5 16:19

举报

41个回答
dear祝子 回答时间:2017-8-5 16:29:47
要莫内存溢出要么堆栈溢出。看你 你的代码应该是内存溢出了,for那么多次,肯定超过RAM最大值了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zi约 回答时间:2017-8-5 16:38:58
dzzwoaizi 发表于 2017-8-5 16:29
要莫内存溢出要么堆栈溢出。看你 你的代码应该是内存溢出了,for那么多次,肯定超过RAM最大值了。 ...

这个要怎么处理啊??
dear祝子 回答时间:2017-8-5 16:43:00
RAM_END应该很大吧!肯定是将这个是缩小啊!也就是你的数组小点,定义的别超过单片机RAM最大值啊
zi约 回答时间:2017-8-5 16:49:01
dzzwoaizi 发表于 2017-8-5 16:43
RAM_END应该很大吧!肯定是将这个是缩小啊!也就是你的数组小点,定义的别超过单片机RAM最大值啊 ...

我把它改到很小好像也不行,RAM_Start=0x20000000; RAM_END=0x20000ffc,没有超过RAM的最大的
dear祝子 回答时间:2017-8-5 16:58:05
你先这样改试试,RAM_Start=0x00000000; RAM_END=0x00000ffc
zi约 回答时间:2017-8-5 16:59:33
dzzwoaizi 发表于 2017-8-5 16:58
你先这样改试试,RAM_Start=0x00000000; RAM_END=0x00000ffc

这个是地址啊,这样改那指针就不是指向RAM的地址了。
dear祝子 回答时间:2017-8-5 17:03:03
我当然知道,你是要读出来数据? 我怀疑你这样写就定义了一个数组 P[] 了,而数组的大小就是0x20000ffc,要么你就从新定义一个数组,两者的差作为数组的大小试试
dear祝子 回答时间:2017-8-5 17:03:28
我也只是猜测,如果不对别见怪
七哥 回答时间:2017-8-5 17:06:18
加个强到类型转换。比较和赋值的元素,一个是指针,一个是常数,怎么比较?
zi约 回答时间:2017-8-5 17:07:31
dzzwoaizi 发表于 2017-8-5 17:03
我当然知道,你是要读出来数据? 我怀疑你这样写就定义了一个数组 P[] 了,而数组的大小就是0x20000ffc,要 ...

不行啊,刚试了下,而且定义的时候直接定义的是一个指针,不是数组指针。。
zi约 回答时间:2017-8-5 17:15:56
toofree 发表于 2017-8-5 17:06
加个强到类型转换。比较和赋值的元素,一个是指针,一个是常数,怎么比较? ...

???什么意思????
七哥 回答时间:2017-8-5 17:24:15
  1. #include <stdio.h>               /* prototype declarations for I/O functions  */
  2. #include <stm32f10x.h>           /* STM32F10x definitions                     */

  3. extern void SER_Init(void);                                   /* see Serial.c */

  4. #define RAM_Start 0x20001000
  5. #define RAM_END   0x20001ffc
  6. #define BCKGRND   0xAA55AA55;

  7. unsigned int * p;

  8. /*----------------------------------------------------------------------------
  9.   main program
  10. *----------------------------------------------------------------------------*/
  11. int main (void)  {               /* execution starts here                     */

  12.   SER_Init ();                   /* initialize the serial interface           */

  13.   printf ("Hello World\n");      /* the 'printf' function call                */
  14.        
  15.         for (p=(unsigned int *)RAM_Start; p<=(unsigned int *)RAM_END; p++)
  16.         {
  17.                 *p = BCKGRND;
  18.         }

  19.   while (1) {                    /* An embedded program does not stop and     */
  20.     ;  /* ... */                 /* never returns. We use an endless loop.    */
  21.   }                              /* Replace the dots (...) with your own code.*/

  22. }
复制代码


评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

七哥 回答时间:2017-8-5 17:26:51
你用的什么芯片?RAM空间从哪开始,到哪结束,有多大?
看一下你编译生成的map文件,都占用哪些内存空间了。
七哥 回答时间:2017-8-5 17:39:04
我设置的是STM32F103RBT,看一下这几张图,不解释,看有没有慧根了。
你能明白多少,算多少吧。
傲游截图20170805173105.jpg
傲游截图20170805173255.jpg

傲游截图20170805173314.jpg

傲游截图20170805173516.jpg

傲游截图20170805173554.jpg

123下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版