- 1
- 2
- 3
- 4
- 5
固件里用裸指针接串口数据要小心
资料介绍
固件里用裸指针接串口数据要小心 先说个场景 嵌入式里,串口接收数据,很多人为了图省事,直接用裸指针指向接收缓冲区,然后往里写、往外读。觉得这样最直接、最快。结果跑着跑着就出各种诡异问题——数据错乱、缓冲区越界、程序跑飞。其实,裸指针用串口数据,是个容易踩坑的地方,不是不能用,而是要特别小心。 裸指针最大的问题是"没有边界"——编译器不知道你指向的内存有多大,也不知道你在往哪里写。一旦用错,就是内存越界、数据覆盖,这类 bug 特别难查。 裸指针接串口数据的坑 第一个坑是缓冲区越界。接收数据时,如果用了裸指针直接往缓冲区写,但没有严格检查写入位置是否超出了缓冲区范围,一旦数据多了,就写到缓冲区外面去了,覆盖了旁边的内存,程序就可能跑飞、出乱数据。 第二个坑是指针越界访问。读取数据时,如果用裸指针一路往前读,没有边界检查,可能读到不该读的内存,读到垃圾数据,或者读到别的变量的值。 第三个坑是指针失效。如果指向的缓冲区被重新分配、或者被别的代码改动了,裸指针还在用,就访问到不该访问的地方。这个在代码重构、缓冲区管理改变时特别容易出。 第四个坑是并发访问。如果中断里往缓冲区写,主循环里用裸指针读,没有做好同步,读写就可能冲突,数据错乱。 为什么用裸指针 很多人用裸指针,是觉得"省内存、效率高、直接"。确实,裸指针在嵌入式里有它的用途,尤其性能要求高的地方。但"高效"不等于"随便用",用裸指针必须配套做好边界管理和安全检查。 问题在于,很多人只图"省事",用了裸指针却忘了管边界、管同步,就埋下了隐患。真正负责任地使用裸指针,其实是"不省事"的——你要自己做所有安全防护。 更稳妥的做法是什么 串口接收数据,更稳妥的做法通常是"带边界和安全机制"的方式。 一是明确缓冲区边界。给缓冲区分配好固定大小,接收时严格检查写入位置,不越过边界。
部分文件列表
| 文件名 | 大小 |
| 固件里用裸指针接串口数据要小心.docx | 38K |
最新上传
-
yahuang001 打赏3.00元 3天前
-
yahuang001 打赏1.00元 3天前
-
zhongshaoxiong 打赏3.00元 3天前
-
他山之石可攻玉 打赏60.00元 3天前
用户:烟雨
-
江岚 打赏210.00元 3天前
用户:潇潇江南
-
江岚 打赏100.00元 3天前
-
21ic下载 打赏310.00元 3天前
用户:gsy幸运
-
21ic下载 打赏310.00元 3天前
用户:zhengdai
-
21ic下载 打赏310.00元 3天前
用户:江岚
-
21ic下载 打赏210.00元 3天前
用户:潇潇江南
-
21ic下载 打赏60.00元 3天前
用户:他山之石可攻玉
-
21ic下载 打赏60.00元 3天前
用户:烟雨
-
21ic下载 打赏60.00元 3天前
用户:w178191520
-
21ic下载 打赏60.00元 3天前
用户:w993263495
-
21ic下载 打赏110.00元 3天前
用户:xzxbybd
-
21ic下载 打赏60.00元 3天前
用户:zq_1943
-
21ic下载 打赏20.00元 3天前
用户:kk1957135547
-
21ic下载 打赏20.00元 3天前
用户:sun2152
-
21ic下载 打赏20.00元 3天前
用户:铁蛋锅
-
21ic下载 打赏20.00元 3天前
用户:xuzhen1
-
21ic下载 打赏20.00元 3天前
用户:w1966891335
-
21ic下载 打赏35.00元 3天前
用户:有理想666
-
21ic下载 打赏15.00元 3天前
用户:nuaanuaa111
-
21ic下载 打赏20.00元 3天前
用户:liqiang9090
-
21ic下载 打赏15.00元 3天前
用户:ningmengge
-
21ic下载 打赏10.00元 3天前
用户:mulanhk
-
21ic下载 打赏5.00元 3天前
用户:asys
-
21ic下载 打赏10.00元 3天前
用户:舞蹈荀彧
-
21ic小能手 打赏5.00元 3天前
资料:磁编码器开源方案
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏50.00元 3天前
-
江岚 打赏20.00元 3天前
-
江岚 打赏10.00元 3天前
-
21ic小能手 打赏10.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏8.00元 3天前
-
21ic小能手 打赏5.00元 3天前
-
21ic小能手 打赏3.00元 3天前




全部评论(0)