24 DKFPRINTF(0x01,
"done\n");
39 DKFPRINTF(0x01,
"mutex = %p, name = %s\n", mutex, name);
58 DKFPRINTF(0x01,
"mutex = %p\n", mutex);
86 DKFPRINTF(0x02,
"%s %d\n", mutex->
name, tcb->
id);
91 DKFPRINTF(0x01,
"(%p:%s) Lock PID=%d \"%s\"\n",
94 }
else if(mutex->
lock_ps == tcb) {
96 #ifdef CHECK_MULTI_LOCK_MUTEX 98 SYSERR_PRINT(
"(%p:%s) Already Locked PID=%d \"%s\"\n",
102 SYSERR_PRINT(
"(%p:%s) Already Locked PID=%d \"%s\" Lock PID=%d \"%s\" time = %08ld.%03ld\n",
106 stime / 1000, stime % 1000);
114 DKFPRINTF(0x01,
"(%p:%s) Wait Unlock PID=%d \"%s\"\n",
147 struct st_tcb *wup_tcb = 0;
149 DKFPRINTF(0x02,
"MUTEX UNLOCK %s %d\n", mutex->
name, tcb->
id);
153 #ifdef CHECK_MULTI_LOCK_MUTEX 154 SYSERR_PRINT(
"(%p:%s) Not locked PID=%d \"%s\"\n",
159 return (
struct st_tcb *)0;
160 }
else if(mutex->
lock_ps != tcb) {
162 SYSERR_PRINT(
"(%p:%s) Cannot Unlock PID=%d \"%s\"\n",
164 SYSERR_PRINT(
"MUTEX Lock PID=%d \"%s\"\n",
166 wup_tcb = (
struct st_tcb *)0;
170 DKFPRINTF(0x01,
"(%p:%s) Unlock PID=%d \"%s\"\n",
173 DKFPRINTF(0x02,
"MUTEX UNLOCK SUCCESS %s %d\n", mutex->
name, tcb->
id);
175 if(check_queue(&mutex->
wait_ps) == 0) {
177 DKFPRINTF(0x01,
"(%p:%s) No Wait Process PID=%d \"%s\"\n",
179 wup_tcb = (
struct st_tcb *)0;
186 if(l_ps == wup_tcb) {
187 SYSERR_PRINT(
"Next queue is some queue ? %d %d\n", l_ps->
id, wup_tcb->
id);
191 DKPRINTF(0x02,
"MUTEX UNLOCK next process %s %d\n", mutex->
name, mutex->
lock_ps->
id);
192 DKPRINTF(0x01,
"(%p:%s) Unlocked Wakeup PID=%d \"%s\"\n",
193 mutex, mutex->
name, wup_tcb->
id, wup_tcb->
name);
void mutex_register_ISR(struct st_mutex *mutex, const char *name)
MUTEXを登録する
unsigned long long get_system_utime(void)
システム時間を取得する
struct st_queue list
MUTEXのキュー
char name[TASK_NAME_LEN+1]
タスク名
int mutex_unregister_ISR(struct st_mutex *mutex)
MUTEXを登録解除する
struct st_mutex mutex_queue_list
MUTEXキュー
struct st_tcb * lock_ps
ロックしているタスク
struct st_queue wait_ps
アンロック待ちタスクキュー
const char * name
MUTEX名文字列