硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5734|回复: 14
收起左侧

[STM32H7] 使用ITCM导致程序异常

[复制链接]

4

主题

37

回帖

49

积分

初级会员

积分
49
发表于 2020-1-10 23:38:36 | 显示全部楼层 |阅读模式
论坛的朋友们,我最近在使用STM32H750XBH6时遇到一个问题,想请教下。
我用的是keil的RTE里面的CMSIS-RTOSV2组件,目前使用了RTX5、USB、文件系统,我创建了一个线程App_main(),然后把包含这个函数的.c文件里的+RO放在.sct分散加载文件中,并且在链接选项中使用此文件。然后初始化了USB从机作为USB虚拟串口,并且把标准输入输出printf重定向到USB虚拟串口。现在就出现了一个问题,我如果不使用ITCM区域,App_main()所在的.c文件+RO默认是分配在flash里面,这时我在线程中printf()打印输出就跑着很正常,但是只要把App_main()所在的.c文件里的+RO放入ITCM里面,跑着跑着就进入hardfault了。
因为我的printf重定向到USB输出了(USBD_CDC_ACM_PutChar函数),我在重定向这里把USB输出注释掉(USBD_CDC_ACM_PutChar注释掉),也就是说prinft最终是没有效果的,这时也是正常的,不死机。
不知道有没有人遇到我这样的问题。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-1-11 00:13:59 | 显示全部楼层
这种问题没有办法帮你测试,因为你的程序不具有通用性,属于特例。
回复

使用道具 举报

4

主题

37

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2020-1-11 19:33:45 | 显示全部楼层
eric2013 发表于 2020-1-11 00:13
这种问题没有办法帮你测试,因为你的程序不具有通用性,属于特例。

我目前为了方便定位出问题,把我自己写的代码基本上都屏蔽了,外设初始化是用的CUBEMX,组件用的是RTE那一套,唯一自己写的就是USB虚拟串口那部分,不过也是用的RTE的demo改的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-1-11 19:52:14 | 显示全部楼层
yswtxiao 发表于 2020-1-11 19:33
我目前为了方便定位出问题,把我自己写的代码基本上都屏蔽了,外设初始化是用的CUBEMX,组件用的是RTE那 ...

我之前把以太网和USB的底层全部用ITCM,无问题。
回复

使用道具 举报

4

主题

37

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2020-1-18 10:46:06 | 显示全部楼层
我这边这几天也不清楚搞了什么东西,今天在改了分散加载文件后,突然就好了。但是不清楚具体原因是什么,只是现在把代码放入ITCM里现在不死机了,这个后续观察下,看看复现的时候再怎么处理。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2020-1-18 13:53:12 | 显示全部楼层
yswtxiao 发表于 2020-1-18 10:46
我这边这几天也不清楚搞了什么东西,今天在改了分散加载文件后,突然就好了。但是不清楚具体原因是什么,只 ...

估计你的程序里面隐含了其它bug。
回复

使用道具 举报

4

主题

37

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2020-4-1 16:19:52 | 显示全部楼层
经过这几天的测试,发现是我把优化等级设为O0导致的,设为O1则一切正常。可以去arm community看下,ARM推荐使用AC6时用O1优化等级,这个优化等级类似等于AC5的O0,但也不是完全绝对的。
回复

使用道具 举报

4

主题

37

回帖

49

积分

初级会员

积分
49
 楼主| 发表于 2020-4-17 09:32:03 | 显示全部楼层
这几天用的H750功能越来越多,发现又触发了代码放入ITCM里面触发异常。我在使用H750-Y版本的时候,我将我的一部分代码放入ITCM里面运行,但是在运行不到1秒钟后就程序跑飞,进入错误硬中断。我参考了Using Cortex-M3M4M7 Fault Exceptions这个手册和cortex_m7_trm_r1p1这个手册,还有AXI4_specification这个手册进行问题的定位。我发现在进入错误硬中断的前一条指令执行后出发了AXIM总线错误,错误的具体根源是SLVERR错误,也就是AXIM主接口访问从接口时有总线错误。而这部分执行的代码正好在ITCM地址空间里。我想请问下,一般是什么原因导致这个SLVERR错误的呢。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-1-25 09:57:45 | 显示全部楼层
请问楼主问题解决了么,我也碰到类似问题。  1个点灯线程在默认的Flash里执行运行正常 通过分散加载到ITCM中执行就进入硬件异常死机了 请问是哪里设置不对么
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-1-25 09:59:53 | 显示全部楼层
请问楼主,你的问题解决了么,我也碰到类似问题。
cubemx生成的nano rtthread工程
1个点灯线程在默认的Flash里执行运行正常
通过分散加载到ITCM中执行就进入硬件异常死机了
请问是哪里设置不对么
回复

使用道具 举报

2

主题

63

回帖

69

积分

初级会员

积分
69
发表于 2021-1-29 12:06:15 | 显示全部楼层
地址 为 0x00000000  是个坑,要躲避一下,这个就是 指针的NULL  
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2021-1-30 08:44:22 | 显示全部楼层
zhq402 发表于 2021-1-25 09:59
请问楼主,你的问题解决了么,我也碰到类似问题。
cubemx生成的nano rtthread工程
1个点灯线程在默认的Fl ...

最近我的一个略复杂RTX5综合程序将时间关键代码都加载了ITCM做加速,运行正常。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-2-20 18:12:03 | 显示全部楼层
后来7整8整,不知怎么弄的点灯程序跑起来了,
但后来程序代码多了后,程序莫名奇妙的跑飞(运行指示灯不闪了,串口不输出了),但在debug下看,跑飞时串口接收中断刷新的变量好像还是对的还在刷,
debug模式stop停的地方也不是异常处理,怀疑是不是程序代码切换导致跑飞?
不知道往itcm放代码的规则是怎样,把rtt的context_rvds.o仿真itcm里一会就飞了,不放好像程序跑的时间能长些
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-2-20 21:52:21 | 显示全部楼层
LR_IROM1 0x08000000 0x00020000 { ; load region size_region
ER_IROM1 0x08000000 0x00020000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}

RW_IRAM1 0x20000000 0x00020000 { ; RW data - 128KB DTCM
.ANY (+RW +ZI)
}

RW_IRAM2 0x00000400 0x0000FC00 {


;.ANY (+RO)
app_rtthread.o (+RO)
;context_rvds.o (+RO)
stm32h7xx_it.o  (+RO)
usrapp.o  (+RO)
;.ANY (+RW +ZI)
}

RW_IRAM3 0x24000000 0x00080000 { ; RW data - 512KB AXI SRAM
*(.RAM_D1)
}

RW_IRAM4 0x30000000 0x00048000 { ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000)
*(.RAM_D2)
}

RW_IRAM5 0x38000000 0x00010000 { ; RW data - 64KB SRAM4(0x38000000)
*(.RAM_D3)
}
}
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2021-2-20 21:53:56 | 显示全部楼层
上面是我的分散加载文件,按个人理解改的,需要提高速度的函数放到一个文件里,加载到itcm中,不知有错误不。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-24 05:57 , Processed in 0.204386 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表