This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAPL138-SYSLINK-umsg



想了解为何我们使用SYSLINK时候,有时候执行reboot重启系统会导致ARM端程序出错,打印信息如下:

PQarm VERSION = 3.0.12
DATE = Nov 6 2017 TIME = 13:47:49
CRC32 = 9DAB9F39
COMPANY = NANJING UK ELECTRICAL
zw debug:ProcMgr_open status = 0.
Attached to slave procId 0.
Loading procId 0.
Loaded file dsp.out on slave procId 0.
Started slave procId 0.
main start... start... start...
Read_UPP_data start... start... start...
Task_Syslink start... start... start...
tskFlicker_compute start start star ... ... ...
--> App_setup:
Error: Umsg.c, line 587: Umsg_Instance_init: wait index pool is empty
Error: Umsg.c, line 160: Umsg_create: instance init error=-1
Error: App_setup: error=-1, file=./app/Arm2dsprxtx.c, line=368
Error: Main_main: error=-1, file=./app/Main_arm.c, line=198
Arm2Dsp is normal exit ... ... !!! !!!

ARM端程序我们做了一些处理,程序启动时候shutdown DSP然后slaveloader DSP,程序结束时候shutdown DSP,slaveloader稍作修改能够重复执行shutdown DSP操作,然后我们实验3分钟kill一次ARM程序,等软狗启动,会出现如下打印信息:(其中zw debug是自己加的打印信息),但是出现这段打印时候ARM程序能正常启动也能工作,不知道这段打印代表什么意义。

Exit exit exit code=15 
YieldThread is normal exit ... ...
EvtSaveThread is normal exit ... ...
uMsg_RcvfromDsp is normal exit ... ...
AppStatThread is normal exit ... ...
Arm2Dsp is normal exit ... ... !!! !!! 
zw debug:ProcMgr_open status = 159195136.
Stopped slave procId 0.
zw debug:ProcMgr_stop status = 111693824.
Unloaded slave procId 0.
zw debug:ProcMgr_unload status = 0.
Detached from slave procId 0.
zw debug:ProcMgr_detach status = 111693824.
PQarm VERSION = 3.0.12
DATE = Nov 7 2017 TIME = 09:19:48
CRC32 = 2A205C80 
COMPANY = NANJING UK ELECTRICAL 
zw debug:ProcMgr_open status = 0.
Attached to slave procId 0.
Loading procId 0.
Loaded file dsp.out on slave procId 0.
Started slave procId 0.
main start... start... start...
Read_UPP_data start... start... start...
BUG: scheduling while atomic: slaveloader/6868/0x40000102
Modules linked in: umsg(O)Task_Syslink start... start... start...
tskFlicker_compute s syslitnartk st(artO star )... ... ...


Pid: 6868, comm: slaveloader
CPU: 0 Tainted: G O (3.3.0_zw3_24M_print #3)
PC is at __flush_whole_cache+0x4/0x18
LR is at remove_vm_area+0xa0/0xc8
pc : [<c0011448>] lr : [<c007a948>] psr: 00000013
sp : ce86fdc8 ip : 00000000 fp : ce86fddc
r10: 00001ad4 r9 : ce86e000 r8 : 00000000
r7 : 00000001 r6 : 00000000 r5 : ce8d0e00 r4 : ce9bbe20
r3 : 00000000 r2 : 00000004 r1 : 00000001 r0 : ce8d0e00
Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 0005317f Table: cea00000 DAC: 00000015
Backtrace: 
[<c000c168>] (dump_backtrace+0x0/0x110) from [<c0357b04>] (dump_stack+0x18/0x1c)
r6:0006c9ef r5:ce8b7b80 r4:ce86fd80 r3:c04d90c0
[<c0357aec>] (dump_stack+0x0/0x1c) from [<c000a390>] (show_regs+0x44/0x50)
[<c000a34c>] (show_regs+0x0/0x50) from [<c00399bc>] (__schedule_bug+0x60/0x78)
r4:ce86fd80 r3:60000013
[<c003995c>] (__schedule_bug+0x0/0x78) from [<c0359024>] (__schedule+0x5c/0x3b8)
r4:ce86e000 r3:00000000
[<c0358fc8>] (__schedule+0x0/0x3b8) from [<c0039d78>] (__cond_resched+0x28/0x38)
r8:00000007 r7:00000047 r6:0006c9ef r5:c04da120 r4:ce86e000
r3:40000101
[<c0039d50>] (__cond_resched+0x0/0x38) from [<c0359414>] (_cond_resched+0x38/0x48)
r4:cf877c00 r3:00000101
[<c03593dc>] (_cond_resched+0x0/0x48) from [<c026bb78>] (sclhi+0x70/0x98)
[<c026bb08>] (sclhi+0x0/0x98) from [<c026c3d0>] (bit_xfer+0x21c/0x414)
r6:00000001 r5:cf877c00 r4:cf862a00 r3:60000013
[<c026c1b4>] (bit_xfer+0x0/0x414) from [<c026a1e4>] (i2c_transfer+0x94/0xe4)
[<c026a150>] (i2c_transfer+0x0/0xe4) from [<c026a69c>] (i2c_smbus_xfer+0x3bc/0x4f4)
[<c026a2e0>] (i2c_smbus_xfer+0x0/0x4f4) from [<c026aa30>] (i2c_smbus_read_word_data+0x3c/0x4c)
[<c026a9f4>] (i2c_smbus_read_word_data+0x0/0x4c) from [<c0199be8>] (pca953x_read_reg+0x3c/0x4c)
[<c0199bac>] (pca953x_read_reg+0x0/0x4c) from [<c0199c2c>] (pca953x_gpio_get_value+0x34/0x5c)
r4:cf86cc68 r3:00000001
[<c0199bf8>] (pca953x_gpio_get_value+0x0/0x5c) from [<c01983dc>] (gpio_get_value_cansleep+0x38/0x48)
r6:00000010 r5:00000004 r4:cf985d00
[<c01983a4>] (gpio_get_value_cansleep+0x0/0x48) from [<c02648bc>] (matrix_keypad_interrupt+0x48/0xcc)
[<c0264874>] (matrix_keypad_interrupt+0x0/0xcc) from [<c0022f10>] (run_timer_softirq+0x180/0x268)
r7:00000101 r6:ce86e000 r5:ce86e000 r4:c0500120
[<c0022d90>] (run_timer_softirq+0x0/0x268) from [<c001cba4>] (__do_softirq+0x88/0x120)
[<c001cb1c>] (__do_softirq+0x0/0x120) from [<c001d060>] (irq_exit+0x4c/0xb0)
[<c001d014>] (irq_exit+0x0/0xb0) from [<c0009cf0>] (handle_IRQ+0x6c/0x8c)
[<c0009c84>] (handle_IRQ+0x0/0x8c) from [<c0008410>] (asm_do_IRQ+0x10/0x14)
r5:00000013 r4:c0011448
[<c0008400>] (asm_do_IRQ+0x0/0x14) from [<c0009038>] (__irq_svc+0x38/0x8c)
Exception stack(0xce86fd80 to 0xce86fdc8)
fd80: ce8d0e00 00000001 00000004 00000000 ce9bbe20 ce8d0e00 00000000 00000001
fda0: 00000000 ce86e000 00001ad4 ce86fddc 00000000 ce86fdc8 c007a948 c0011448
fdc0: 00000013 ffffffff
[<c007a8a8>] (remove_vm_area+0x0/0xc8) from [<c007aa48>] (__vunmap+0x34/0xd0)
r5:00000000 r4:d081d000
[<c007aa14>] (__vunmap+0x0/0xd0) from [<c007abc4>] (vfree+0x38/0x3c)
r7:d0bb1fff r6:bf0e2d78 r5:00000000 r4:d081d000
[<c007ab8c>] (vfree+0x0/0x3c) from [<bf0259b0>] (MemoryOS_free+0x84/0x118 [syslink])
[<bf02592c>] (MemoryOS_free+0x0/0x118 [syslink]) from [<bf019c8c>] (Memory_free+0x8c/0x104 [syslink])
r6:d081d000 r5:00000010 r4:00000000
[<bf019c00>] (Memory_free+0x0/0x104 [syslink]) from [<bf02120c>] (ResTrack_unregister+0xd0/0x124 [syslink])
r6:00000000 r5:d081d000 r4:d0bb2000
[<bf02113c>] (ResTrack_unregister+0x0/0x124 [syslink]) from [<bf07b50c>] (HeapBufMPDrv_ioctl+0x6d4/0x99c [syslink])
[<bf07ae38>] (HeapBufMPDrv_ioctl+0x0/0x99c [syslink]) from [<c0099b24>] (do_vfs_ioctl+0x51c/0x5a0)
[<c0099608>] (do_vfs_ioctl+0x0/0x5a0) from [<c0099be8>] (sys_ioctl+0x40/0x64)
r9:ce86e000 r8:c00095c4 r7:00000010 r6:c018f353 r5:bec8cb38
r4:ce9b9680
[<c0099ba8>] (sys_ioctl+0x0/0x64) from [<c0009440>] (ret_fast_syscall+0x0/0x2c)
r7:00000036 r6:00000000 r5:0002533c r4:bec8cb38
--> App_setup:
arm shr=b5526080,ddr=9dbd40,new==b5f01e00 13350
<-- App_setup: 0
[createLogThread] Process(8) try to createLogThread.

看umsg.c相关打印应该就是umsg_create()时候在umsg.c里面的Umsg_Instance_init()那里出了问题,大概就是Umsg_mod.sys->wiMskAry[][]的32位值都是1导致的错误。

    /* acquire a wait index, take from reader's pool */
    key = Umsg_enterGate();

    for (wi = 0; wi < WI_MAX; wi++) {
        mai = wi / 32;          /* mask array index */
        bit = wi - (mai * 32);  /* bit offset */
        mask = 0x1 << bit;

        /* if wi is available, then take it */
        if ((Umsg_mod.sys->wiMskAry[readerProc][mai] & mask) == 0) { Umsg_mod.sys->wiMskAry[readerProc][mai] |= mask; obj->block->waitIndex = wi; break; }
    }