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

求大神帮我解决调试问题

[复制链接]
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版