打印
[技术问答]

求助 新唐 MCU 内存数据全异常

[复制链接]
1065|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vincero|  楼主 | 2017-10-17 21:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vincero 于 2017-10-17 21:27 编辑

各路大神求助:
       遇到个棘手问题,单片机(M451VE6AE)在长时间运行比如一晚后,内存数据全错位异常了!
       用 图3 的办法仿真看到 MCU在运行,可以做断点,但 bool 型的变量出现了 int的数据、数组给值给不成功、看门狗没有触动。
       尝试过查数组溢出、整形变量溢出、指针乱指、改堆栈大小( Stack_Size      EQU     0x00000800),问题没有解决。
       请帮忙看下还有什么办法可以尝试?







跟两个串口都移植的FreeModbus 有关不?
FreeModbusCommPC.zip (11.54 KB)
FreeModbusCommSlm.zip (4.37 KB)




沙发
稳稳の幸福| | 2017-10-17 21:56 | 只看该作者
要看这个移植的东西有没有可能动到那个位置的内存。

使用特权

评论回复
板凳
vincero|  楼主 | 2017-10-18 08:58 | 只看该作者
稳稳の幸福 发表于 2017-10-17 21:56
要看这个移植的东西有没有可能动到那个位置的内存。

请问怎么看?

使用特权

评论回复
地板
yiyigirl2014| | 2017-10-18 11:55 | 只看该作者
你这就错了,Bool类型,实际上在内存中是占位8BIT的,也就是相当于char类型。

使用特权

评论回复
5
yiyigirl2014| | 2017-10-18 11:55 | 只看该作者
并不是真实的1BIT。切记不要随便定义BOOL,特别是在单片机中。

使用特权

评论回复
6
yiyigirl2014| | 2017-10-18 11:56 | 只看该作者
如果定义了,不要对BOOl当做1BIT进行指针操作或者作为1BIT读写,你直接就当一个完整的变量操作就行了。

使用特权

评论回复
7
mxzwish| | 2017-10-18 11:57 | 只看该作者
在异常位置,例如你的那个结构体里面插入一个谁都不会使用的变量,例如
bool xxx;
int tripwire1;
bool xxx;

然后IDE调试运行,在tripwire1位置下硬件写入断点,然后继续跑一个晚上。
当有代码写入这个位置时就会断下来了。

使用特权

评论回复
8
mxzwish| | 2017-10-18 11:57 | 只看该作者
比较怀疑是你设置DMA操作、或memcpy,或memset等内存复制操作时,Size太大,把这个区域覆盖了。

使用特权

评论回复
9
vincero|  楼主 | 2017-10-19 10:10 | 只看该作者
yiyigirl2014 发表于 2017-10-18 11:56
如果定义了,不要对BOOl当做1BIT进行指针操作或者作为1BIT读写,你直接就当一个完整的变量操作就行了。 ...

谢谢回复。但是我知道C99 标准是支持bool (1bit)的,Keil - Project- Options for Taget-C/C++有个选项是C99 Mode,勾上就可以使用C99标准了。请看
C99的新关键字_Bool    (抱歉没权限发URL,请baidu下 )
另外还有:
C99的新特性                (抱歉没权限发URL)
但是我的问题不在这,是单片机内存数据全错误了,在运行,可是全部动作都是错的

使用特权

评论回复
10
vincero|  楼主 | 2017-10-19 10:14 | 只看该作者
mxzwish 发表于 2017-10-18 11:57
比较怀疑是你设置DMA操作、或memcpy,或memset等内存复制操作时,Size太大,把这个区域覆盖了。 ...

谢谢回复。
没有使用DMA,memcpy 和 memset 使用时都考虑了数组大小,像这样用的:
( void )memcpy( Unit.RecentErro, Eeprom.HistoryError, ARR_SIZE(Eeprom.HistoryError));
( void )memset( Unit.FatalErro,    0x00, ARR_SIZE( Unit.FatalErro ) );

我再试下您前一种办法

使用特权

评论回复
11
玛尼玛尼哄| | 2017-10-19 21:50 | 只看该作者
好奇怪,第一次见这种错误,编译器不可能错的这么离谱啊。

使用特权

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

本版积分规则

1

主题

17

帖子

2

粉丝