智能机器狗项目开发中的问题记录
本文总结了嵌入式开发中的多个问题及解决方法,主要包括:1)IPC目录未初始化导致的问题;2)硬件焊接和开关方向错误等导致的通信故障;3)时间戳处理时区混乱和数据库存储问题;4)消息队列类型设置错误;5)使用valgrind定位段错误;6)电源和LDO芯片故障;7)栈溢出导致程序崩溃;8)传感器引脚连接缺失;9)串口中断配置错误;10)固件与flash容量不匹配等。这些问题涉及硬件调试、软件配置和系
- 还没有将创建命令添加到启动脚本 使用消息队列和共享内存 需要
mkdir /tmp/ipc/shmem -p
mkdir /tmp/ipc/msgqueue/peer -p
-
板子焊接完成后,做硬件测试时发现板子虚焊问题较多
-
链接stlink后,有时能烧录有时不能,板子还一直上锁,硬件调试了挺长时间,结果发现是软件烧录口没有打开
-
问题:做数据库存储存历史记录(包括时间戳)时,时间戳和时区的混乱导致调试了很长时间,时间转换就是不对。解决:明确概念 时间戳是绝对的都是utc时间戳 根据utc时间戳可以转换成本地时间或utc时间;虚拟机的时区务必设置成北京时间
-
问题:测试控制指令时,测试程序一直收不到消息。 解决:msg的类型虽然没用,但必须大于0

-
wifi模块一直不能正常通信 被卡住很久 最后发现是硬件问题 板子上的双刀三制开关有正反 开关焊反了!
-
遇到段错误,没有log

可以通过valgrind定位段错误
gcc -g your_code.c -o test.out
valgrind --leak-check=full --track-origins=yes ./test.out

分析发现是用cJSON时返回了NULL,对NULL进行了解引用操作

- 问题:串口连接电脑后 电脑已经识别到了ch340串口 但是单片机给串口发数据 串口收不到
解决: 控制变量法 先用了一块好的板子 测试后发现代码没问题,type c的数据线也没问题,stlink也没问题,最后测试发现是双刀三掷开关拨到串口档 开关没有接通 应该是开关坏了或这开关没焊接好
-
wifi模块烧录完固件后,复位后收不到ready。用AI分析log发现,别人给的固件有问题,esp8266的flash大小是1MB,而固件是8MB,自己重新到官网下载对应1MB固件,重新烧录即可。
-
给单片机烧录固件时,stlink识别不到,而插上stlink的vcc引脚(3.3V)就识别到了,usb供电时,用万用表测量发现vcc的引脚是4.69V!又经过检测发现ldo降压芯片烧了,失去了降压功能,需要换一个AMS117-3.3。
-
代码烧录到板子后,没有看到相应的调试信息。最后发现是栈溢出问题,设置的栈大小为0x400,即1024个字节,而这里定义了过大的局部变量,导致程序崩溃

-
ap3216 位置和光照读出来一直是0 卡了很久很久 不是代码问题 不是焊接问题 不是模块坏了的问题 是少接了一根引脚 ap3216不光要接vcc 还得将vled引脚接3.3v!!
-
stm32固件运行后,卡在准备复位

mcu固件的bug很难找,因为它不像跑在linux系统上的那些程序,还可以借助valgrind调试等等,这里直接卡死在这了。一个一个排查也没发现问题,最后重写时才发现这里是重新开启空闲中断的位置不对


一开始是跟开启uart3中断的函数一起放在了47行,这样的话,只要有串口中断进来(包括串口3)就会再一次开启中断,会导致串口5中断一直重复开启;后面又放在了memset后面,这时只有透传模式下才会重新开启串口5中断,在配置网络时,会导致串口5中断不会重新开启,只能放在上图中的位置,有串口5中断来了就重新开启串口5空闲中断
中断,在配置网络时,会导致串口5中断不会重新开启,只能放在上图中的位置,有串口5中断来了就重新开启串口5空闲中断
- 用串口1 printf打印调试信息时 有时能打印出来 有时不能 电脑问题?未解决
更多推荐
所有评论(0)