生活随笔
收集整理的這篇文章主要介紹了
请求模式解决共享资源冲突
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
1 請求模式解決共享資源沖突
原有方式:
我們可以對其進行改進,統一處理:
代碼如下:
#include "tinyOS.h"
#include "app.h"
#include "hal.h"static tTask task1
;
static tTask task2
;
static tTask task3
;
static tTask task4
; static tTaskStack task1Env
[TASK1_ENV_SIZE
];
static tTaskStack task2Env
[TASK2_ENV_SIZE
];
static tTaskStack task3Env
[TASK3_ENV_SIZE
];
static tTaskStack task4Env
[TASK4_ENV_SIZE
]; int task1Flag
;
int task2Flag
;
int task3Flag
;
int task4Flag
; tList list
;
tNode nodes
[20]; #define CMD_REMOVE_FIRST 1tMbox cmdMbox
;
void * cmdMsgBuffer
[10];
void listInit
(void) {int i
= 0;tListInit(&list
);for (i
= 0; i
< sizeof(nodes
) / sizeof(tNode
); i
++) {tListAddLast(&list
, &nodes
[i
]);}
}
void listPrint
(void) {uint32_t count
= 0;tNode
*currentNode
= 0;for (currentNode
= tListFirst(&list
); currentNode
!= (tNode
*) 0; currentNode
= tListNext(&list
, currentNode
)) {xprintf("Node %d\n", count
);if (count
++ == 0) {interruptByIRQ(IRQ_PRIO_HIGH
);}}
}
void IRQHighHandler
(void) {tMboxNotify(&cmdMbox
, (void *)CMD_REMOVE_FIRST
, tMBOXSendNormal
);
}
void task1Entry
(void *param
) {listInit();listPrint();for (;;) {uint32_t err
= 0;void * cmd
= 0;task1Flag
= 1;tTaskDelay(1);task1Flag
= 0;tTaskDelay(1);err
= tMboxNoWaitGet(&cmdMbox
, &cmd
);if (err
== tErrorNoError
) {if ((uint32_t
)cmd
== CMD_REMOVE_FIRST
) {tListRemoveFirst(&list
);}}}
}
void task2Entry
(void *param
) {for (;;) {task2Flag
= 1;tTaskDelay(1);task2Flag
= 0;tTaskDelay(1);}
}
void task3Entry
(void *param
) {for (;;) {task3Flag
= 1;tTaskDelay(1);task3Flag
= 0;tTaskDelay(1);}
}
void task4Entry
(void *param
) {for (;;) {task4Flag
= 1;tTaskDelay(1);task4Flag
= 0;tTaskDelay(1);}
}
void tInitApp
(void) {halInit();tMboxInit(&cmdMbox
, cmdMsgBuffer
, 10);interruptEnable(IRQ_PRIO_HIGH
, 1);tTaskInit(&task1
, task1Entry
, (void *) 0x0, TASK1_PRIO
, task1Env
, sizeof(task1Env
));tTaskInit(&task2
, task2Entry
, (void *) 0x0, TASK2_PRIO
, task2Env
, sizeof(task2Env
));tTaskInit(&task3
, task3Entry
, (void *) 0x0, TASK3_PRIO
, task3Env
, sizeof(task3Env
));tTaskInit(&task4
, task4Entry
, (void *) 0x0, TASK4_PRIO
, task4Env
, sizeof(task4Env
));
}
優缺點如下:
參考資料:
手把手教你學用嵌入式操作系統
總結
以上是生活随笔為你收集整理的请求模式解决共享资源冲突的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。