457878 发表于 2020-12-26 16:33

这个硬件错误是什么情况,怎么查找问题?

本帖最后由 457878 于 2020-12-26 17:33 编辑

An MPU or Execute Never (XN) default memory map access violation has occurred on an instruction fetch (CFSR.IACCVIOL, MMFAR).

断点跟踪到一句printf语句时发生此硬件异常: printf("******************");

以上是【编译优化 = None】 时出错,【优化等级 = Medium】就OK
有点怕怕了,要用什么优化等级,什么时候又会出现这个硬件异常? ...

muyichuan2012 发表于 2020-12-27 11:57

这里貌似工程建立时没配置好,可否把工程贴一下,我们帮忙看一下。

muyichuan2012 发表于 2020-12-27 12:04

或者直接调用at32 421 template工程,只要先调用usart init函数,就可以直接使用printf函数了。

457878 发表于 2020-12-28 11:10

muyichuan2012 发表于 2020-12-27 12:04
或者直接调用at32 421 template工程,只要先调用usart init函数,就可以直接使用printf函数了。 ...

管的很紧,代码就不贴了
单元调试printf 调用一直正常,整合之后才出现这个问题.
怀疑是优化不足导致内存不够用,堆栈溢出了吧...

457878 发表于 2020-12-28 11:14

本帖最后由 457878 于 2020-12-28 11:15 编辑

上次提到一个下载警告(不是编译警告),说不定跟这个也有关呢
https://bbs.21ic.com/icview-3059162-1-1.html

084425 发表于 2020-12-28 19:31

可以改大堆栈试试,或者加一个检测变量在堆栈栈底地址

457878 发表于 2020-12-29 10:27

084425 发表于 2020-12-28 19:31
可以改大堆栈试试,或者加一个检测变量在堆栈栈底地址

怎么查看堆栈栈底在什么位置? 怎么操作呢?
map里面所有关于stack的内容抠出:
CSTACK$$Base            0x2000'0b18          --   Gb- Linker created -
CSTACK$$Limit         0x2000'1b18          --   Gb- Linker created -

define block CSTACK with size = 4K, alignment = 8 { };
define block HEAP with size = 4K, alignment = 8 { };

CSTACK                      0x2000'0b180x1000<Block>
    CSTACK         uninit   0x2000'0b180x1000<Block tail>
                            - 0x2000'1b180x1000

*** STACK USAGE
Call Graph Root CategoryMax UseTotal Use
----------------------------------------
Program entry                912      912
Uncalled function            264      3 520





457878 发表于 2020-12-29 10:28

本帖最后由 457878 于 2020-12-29 10:30 编辑

startup.s 文件吗? 怎么操作呢?

muyichuan2012 发表于 2020-12-29 13:05

我看你使用的IAR编译器,那可以在如下图所示修改

084425 发表于 2021-1-1 22:08

楼上正解

457878 发表于 2021-1-3 12:09

本帖最后由 457878 于 2021-1-3 13:38 编辑

只要改堆栈(0x1001),下载就提示这个【编译正常】....



想用2个变量监视堆栈的栈底和栈顶,代码怎么写?


单片小菜 发表于 2021-1-4 11:23

这个可以的,你需要将工程贴出来,然后,一起弄一下,看看。

457878 发表于 2021-1-6 00:21

单片小菜 发表于 2021-1-4 11:23
这个可以的,你需要将工程贴出来,然后,一起弄一下,看看。

不能贴,贴了就泄密了...
页: [1]
查看完整版本: 这个硬件错误是什么情况,怎么查找问题?