黄山派移植ble/hid例程添加lvgl ui,在成功在PC端打出几次字符之后遇访问无效内存卡死导致硬件错误

sp: 0x20021dd0
psr: 0x61000000
r00: 0x00000000
r01: 0x000043f0
r02: 0x20027a74
r03: 0x00000000
r04: 0x00000004
r05: 0x20021b98
r06: 0xdeadbeef
r07: 0xdeadbeef
r08: 0xdeadbeef
r09: 0xdeadbeef
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000000
lr: 0x12071961
pc: 0x20006a00
在執行緒上發生硬體錯誤:tidle

=====================

PSP: 0x20021d3c, MSP: 0x20001fc4

執行緒資訊

執行緒 優先權 狀態 sp 頂端 堆疊大小 最大使用 剩餘滴答 錯誤

KE_EVT3 10 暫停 0x20030010 0x20030084 0x00000400 35% 0x00000005 000

KE_EVT0 25 暫停 0x2002fbf8 0x2002fc6c 0x00000400 11% 0x00000014 000
KE_EVT2 12 暫停 0x2002f7e0 0x2002f854 0x00001000 23% 0x00000006 000
tpread 10 暫停 0x2001d410 0x2001d494 0x00000400 36% 0x00000003 000
lcd_task 12 暫停 0x2001cfb8 0x2001d094 0x00000800 30% 0x00000009 000
ble_thre 12 暫停 0x20027808 0x2002789c 0x00000c00 26% 0x00000008 000
lvgl_thr 11 暫停 0x20026b70 0x20026be8 0x00001000 47% 0x00000005 000
tshell 20 暫停 0x20025a40 0x20025b34 0x00001000 07% 0x0000000a 000
tidle 31 準備 0x20021d40 0x20021d94 0x00000200 21% 0x00000020 000
timer 4 暫停 0x2001d818 0x2001d894 0x00000400 22% 0x00000009 000
main 10 暫停 0x20023fa8 0x200240b0 0x00000800 33% 0x00000003 000

郵箱資訊

郵箱 項目大小 暫停的執行緒

app 0000 0008 1:ble_thre

訊息佇列資訊

訊息佇列 項目 暫停的執行緒

drv_lcd 0000 1:lcd_task�

互斥鎖資訊

互斥鎖 擁有者 持有數 暫停的執行緒

tplck (NULL) 0000 0

ble_flas (NULL) 0000 0
rtc (NULL) 0000 0
ulog loc (NULL) 0000 0
fslock (NULL) 0000 0
i2c_bus_ (NULL) 0000 0
i2c_bus_ (NULL) 0000 0
i2c_bus_ (NULL) 0000 0

訊號量資訊

訊號量 值 暫停的執行緒

KE 000 1:KE_EVT3

KE 000 1:KE_EVT0
ke_mem_e 001 0
ke_mem_e 001 0
ke_mem_e 001 0
ke_mem_e 001 0
KE 000 1:KE_EVT2
lv_data 001 0
tp_ctrl 001 0
lv_lcd 001 0
sifli 000 0
lcd_msg 000 0
lcd_draw 000 0
drv_lcd 001 0
shrx 000 0
epic 001 0
ft6146 000 1:tpread
aes_drv 001 0
drv_eDma 001 0
gpadc 001 0
i2c4 000 0
i2c2 000 0
i2c1 000 0
heap 001 0
flash2 001 0

記憶體資訊

總記憶體: 378188 已使用記憶體: 47440 最大分配記憶體: 54812

記憶體堆資訊

記憶體堆 池大小 最大使用大小 可用大小

記憶體管理錯誤:
SCB_CFSR_MFSR:0x82 DACCVIOL SCB->MMAR:DEADBEEF

main.c|附件 (27.2 KB)

觸控事件處理:

events_init.c|附件 (3.9 KB)

直接看看不出来, 看log是数据访问的地址出现非法了. 你可以用你习惯的debug工具, 看一下怎么跑到这里死机的.

使用lvgl有一点需要注意的是它的所有API是不支持多线程调用的.

结帖:hid例程有bug,这里应该改为KEY_PRESS_MAX,不然会访问无效内存,单纯测试例程不会有问题应该是内存使用较少,加了ui之后越界访问出错了