泡泡鱼lu 发表于 2024-1-16 14:05:46

单片机数组写越界会死机,读越界为什么也会死机

一直以为都以为单片机数组读越界不会死机,只有写越界才会死机,但有一个程序不小心读越界了,才发现这个问题。

tim 发表于 2024-1-16 14:27:41

别问死不死机了,不管读写都不要越界就是了

xy3dg12 发表于 2024-1-16 14:41:47

可能读到了不该读的地址,或者不是越界本身引起的,而是读到的数据引起的死机

初音之恋 发表于 2024-1-16 14:57:13

读到的数据是不确定的,把不确定的数据拿去使用导致的死机

1a2b3c 发表于 2024-1-16 15:00:47

很多8位机不会有这个问题,
好像就是高级一些的芯片才会这样,

tang_qianfeng 发表于 2024-1-16 15:45:08

读到了不允许读的区域,hadfault了

albert_w 发表于 2024-1-16 17:14:55

仅仅越界到周围读取不会死机吧,又没有段错误。 要么数据异常业务逻辑飞了,或者地址飞到不存在的地方了

lb0857 发表于 2024-1-16 19:28:44

越界,野指针。
有时候查找起来很熬人

Firman 发表于 2024-1-17 00:01:41

movc与movx是操作不同的区域呀,为什么会越界?

kebaojun305 发表于 2024-1-17 10:12:24

会不会死机 的看 读到的是啥    出啥问题都可能

first_blood 发表于 2024-1-17 11:50:42

读到超过ram实际地址范围

yuyu87 发表于 2024-1-17 11:50:55

这算啥,有时候不对齐访问死机才难找呢

爱晴海玩偶 发表于 2024-1-17 14:18:51

yuyu87 发表于 2024-1-17 11:50
这算啥,有时候不对齐访问死机才难找呢
(引用自12楼)

细说一下。这个是指结构体没有自动对齐吗

1a2b3c 发表于 2024-1-17 14:40:54

yuyu87 发表于 2024-1-17 11:50
这算啥,有时候不对齐访问死机才难找呢
(引用自12楼)

哈哈,这个我以前从来不知道对齐是啥意思,
前段时间从8位机移植个函数到M0芯片,结果那个写flash的总是死机,找了很久,有时候随便增减一句代码就对了,稍微一改就错了,原来是地址指针随着代码的变动,一会是4的整倍数(对齐了),一会不是4的整倍,所以就出错
发现函数的问题后再去看芯片手册才知道需要4字节对齐,
以前玩8未机从来就没有这个概念。。。

zxq6 发表于 2024-1-17 16:02:13

爱晴海玩偶 发表于 2024-1-17 14:18
细说一下。这个是指结构体没有自动对齐吗
(引用自13楼)

比如你有一个指针
(unsigned char*) a=0x0000;
你只能访问 a+4,a+8,a+12,a+16这种4的整数倍的地址的数据
当如果你访问a+3的时候,哦豁。
这就是对齐。

1a2b3c 发表于 2024-1-17 17:04:54

zxq6 发表于 2024-1-17 16:02
比如你有一个指针
(unsigned char*) a=0x0000;
你只能访问 a+4,a+8,a+12,a+16这种4的整数倍的地址的数据

(引用自15楼)

对的,就是这样,我用的那个芯片读写flash不能读到非4的整倍数的地址,读就是系统硬件错误,

爱晴海玩偶 发表于 2024-1-17 18:41:25

zxq6 发表于 2024-1-17 16:02
比如你有一个指针
(unsigned char*) a=0x0000;
你只能访问 a+4,a+8,a+12,a+16这种4的整数倍的地址的数据
(引用自15楼)

这种只针对芯片手册明确说明的才会出现吧。一般的芯片内部的ram区不会存在这个问题吧。

tang_qianfeng 发表于 2024-1-17 19:21:43

m4内核可以非对齐访问,m0不行

zxq6 发表于 2024-1-19 14:32:45

爱晴海玩偶 发表于 2024-1-17 18:41
这种只针对芯片手册明确说明的才会出现吧。一般的芯片内部的ram区不会存在这个问题吧。 ...
(引用自17楼)

内存也不一定。比如有些外扩的SRAM,是没有ADDR0的,这样你访问奇数地址的数据就会出错。

cingljlw 发表于 2024-2-16 16:47:52

应该是对齐问题,检查一下HF的故障内容

zchong 发表于 2024-2-16 20:46:12

这个问题很复杂,读写越界要看怎么越界了,也不一定非死机,还要看处理器是怎么设计的,总之一言难尽啊!{:lol:}

ehengio 发表于 2024-2-20 10:05:39

要看具体单片机,象瑞萨的MCU有内存保护的,读了未过赋值的RAM也会死机
页: [1]
查看完整版本: 单片机数组写越界会死机,读越界为什么也会死机