星期二, 1月 10, 2006
FreeRTOS Memory operation
FreeRTOS的kernel主要有3個檔案。 1. Tasks.c
2. Queue.c
3. List.c
三種記憶體操作方式
Scheme1. (heap_1.c)
當memory被allocated之後就不允許被free了。
非常試適合小系統使用,Ex: PIC, 8051。
某些條件下的system是可以使用這種memory的配置模式。
永遠不會執行function, vTaskDelete(), vQueueDelete,
也就是scheduler()開始之後不會有task劊造或刪除。 Scheme2.(heap_2.c)
用在一般的嵌入系統,可以動態的產生新的task, queue
相對也可以deletes task, queue. Scheme3.(heap_3.c)
只是把標準malloc(), free()包裝起來而已。
星期二, 1月 03, 2006
Semaphore的使用
# Using a semaphore to get permission to access a printer.
可以把semaphore包裝(Encapsulate semaphore)在驅動printer的函數中,
Task-1呼叫該函數時並不會知道是否存取了semaphore.
Task-2也同時呼叫該函數時因為semaphore的已被Pend,
必須等待一段時間才能存取semaphore.
Pseudo code:
void Driver(char *string)
{
Acquire port's semaphore.
Send command to device.
if(GetSemaphore() != True)
{
Wait a while.
if(GetSemaphore() != True)
{
Release semaphore.
return (error code).
}
Release semaphore.
}
else
{
Release semaphore.
}
# Synchronization, I--> Unilateral rendezous.
II-> Bilateral rendezous.
可以把semaphore包裝(Encapsulate semaphore)在驅動printer的函數中,
Task-1呼叫該函數時並不會知道是否存取了semaphore.
Task-2也同時呼叫該函數時因為semaphore的已被Pend,
必須等待一段時間才能存取semaphore.
Pseudo code:
void Driver(char *string)
{
Acquire port's semaphore.
Send command to device.
if(GetSemaphore() != True)
{
Wait a while.
if(GetSemaphore() != True)
{
Release semaphore.
return (error code).
}
Release semaphore.
}
else
{
Release semaphore.
}
# Synchronization, I--> Unilateral rendezous.
II-> Bilateral rendezous.
訂閱:
意見 (Atom)
