(Codec engine, OMAP-L137, DSP/BIOS)
My codec and background tasks were running, although with a bug. I traced the bug down to a field in memory that I would clear in one task and check in another. When the second task checked the field, it had a 1 in it (even though I had verified that the clear worked).
Because I'm using DSP/BIOS, cache is enabled and one of the tasks is doing DMAs. I've had to flush the cache after the DMA completion in order to pass the DMA results to the second task.
I suspected that the aberrant field might have been in the same cache block (even though it is not part of the buffer).
I added some DATA_ALIGN statements before the buffers and before the field that I'm concerned about. When I did this, the codec stopped loading. (The trace output follows the remaining details of my attempts to debug.)
I have some LEDs on my board, so I had each one of the codec functions set the LED pattern. I figured I could figure out how far it got that way. None of the LEDs ever lit. Then I added similar statements to my background tasks. (There are two.) One of the tasks gets to the point where it pends waiting for a mail message. The other task never executes at all. (No LED patterns from it.)
In summary, one background task runs fine. The other doesn't start. The codec itself never gets created. My memory map indicates that I have only used about half of the available DDR2, and up until the align statements, all tasks ran and cycled as expected. Available heap is 0x01000000 long. Available task stack is 0x00010000 long. Can anyone suggest how I might debug this?
@2,862,124us: [+0 T:0x4001cf50] ti.sdo.ce.universal.UNIVERSAL - UNIVERSAL_create> Enter (engine=0x4a4f0, name='vqm_results', params=0x0 (size=0x0))
@2,862,338us: [+0 T:0x4001cf50] CV - VISA_create(0x4a4f0, 'vqm_results', 0x0, 0x3712, 'ti.sdo.ce.universal.IUNIVERSAL')
@2,862,588us: [+0 T:0x4001cf50] CV - VISA_create2(0x4a4f0, 'vqm_results', 0x0, 0x0, 0x3712, 'ti.sdo.ce.universal.IUNIVERSAL')
@2,862,874us: [+0 T:0x4001cf50] CE - Engine_createNode(0x4a4f0, 'vqm_results', 3712, 0x0, 0x0, 0xbece3bb4)
@2,863,064us: [+0 T:0x4001cf50] CE - Engine> allocNode Enter(engine=0x4a4f0, impId='vqm_results')
@2,863,278us: [+0 T:0x4001cf50] CE - Engine> allocNode(). Calling Comm_create(gppfromnode_1018_1, 0x4a858, NULL)
Entered MSGQ_open ()
queueName [0xbece3aae]
msgqQueue [0x4a858]
attrs [0x0]
Entered DRV_Invoke ()
drvObj [0x4a630]
cmdId [0x6f03]
arg1 [0xbece3a28]
arg2 [0x0]
Status: 8000
Leaving DRV_Invoke
() status [0x8000]
Leaving MSGQ_open () status [0x8000]
Entered MSGQ_put ()
msgqQueue [0x0]
msg [0x41168c80]
Entered DRV_Invoke ()
drvObj [0x4a630]
cmdId [0x6f0a]
arg1 [0xbece3a34]
arg2 [0x0]
Entered _POOL_xltBuf ()
poolId [0x0]
bufPtr [0xbece3a3c]
xltFlag [0x200]
Leaving _POOL_xltBuf () status [0x8000]
Status: 8000
Leaving DRV_Invoke
() status [0x8000]
Leaving MSGQ_put () status [0x8000]
Entered MSGQ_get ()
msgqQueue [0x10000]
timeout [0xffffffff]
msg [0xbece3acc]
Entered DRV_Invoke ()
drvObj [0x4a630]
cmdId [0x6f0b]
arg1 [0xbece3a2c]
arg2 [0x0]