vxWorks 6.3 を実行していますが、問題が発生しました。RTP のように一連のタスクを実行しています。タスクを作成し、何かを実行してからタスクを破棄します。次に、非常に近い 2 つのタスクを作成し、何かを実行してそれらを破棄します。これらのタスクは、malloc やメモリの解放などのクレイジーなことを実行する必要があります。残念ながら、これを何度も行うと、タスクの 1 つがセマフォのメモリ (malloc と free の両方) ルーチンでスタックしてしまいます。free または malloc のいずれかでタスクの開始時に「失われる」のは、常に 2 番目のタスクです。障害が発生した後でも、タスクを作成でき、メモリを malloc できます。失敗したタスクは永遠に座って、セマフォを待っています...他のタスクが使用しなければならないセマフォ。
タスクがメモリルーチンでスタックする方法を知っている人はいますか?
0x08265e58 malloc +0x2c : 0x082416f4 ()
0x08267e50 memPartAlloc +0x28 : 0x08241734 ()
0x08267e0c memPartAlignedAlloc+0x70 : 0x08267c04 ()
0x08267c7c memPartFree +0xfc : 0x08240654 ()
0x082753c0 semTake +0x90 : 0x08242534 ()
0x082752ec semUMTake +0xd8 : 0x08242514 ()
---- system call boundary ----
-> tw 0x69d21b0
NAME ENTRY TID STATUS DELAY OBJ_TYPE OBJ_ID OBJ_NAME
---------- ---------- ---------- ---------- ----- ---------- ---------- --------
tHttp631-2 0x827dbfc 0x69d21b0 PEND 0 SEM_M 0x6859650 N/A
Semaphore Id : 0x6859650
Semaphore Type : MUTEX
Task Queuing : PRIORITY
Pended Tasks : 1
Owner : 0x69d1a08 Deleted!
Options : 0xd SEM_Q_PRIORITY
SEM_DELETE_SAFE
SEM_INVERSION_SAFE
VxWorks Events
--------------
Registered Task : NONE
Event(s) to Send : N/A
Options : N/A
Pended Tasks
------------
NAME TID PRI TIMEOUT
---------- -------- --- -------
tHttp631-25502 69d21b0 120 0
value = 0 = 0x0
->