假設當任務a在正在向對佇列傳送資料時被打斷,進入任務b,也向同一對列傳送資料,那麼對列中的資料順序就是亂的。這個函式是所謂的不可重入函式。但是通過增加二值訊號量,給對列上一把鎖,就可以成為可重入函式。注意獲取訊號的方式是阻塞式的。
void uart1_printf(const char *format, ...)
va_start(args, format);
str_cnt = vsprintf( (char *)usart1_txbuffer, format, args);
tmp=usart1_txbuffer;
while(str_cnt--)
ossemaphorerelease (uart1_tx_semaphore);
}else
}}
可重入函式與不可重入函式
可重入 reentrant 函式可以由多於乙個任務併發使用,而不必擔心資料錯誤。相反,不可重入 non reentrant 函式不能由超過乙個任務所共享,除非能確保函式的互斥 或者使用訊號量,或者在 的關鍵部分禁用中斷 可重入函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。可重入函式要麼使用...
可重入函式和不可重入函式
可重入函式 可重入函式主要用於多工環境中,乙個可重入函式簡單來說是可以被中斷的函式,即可以在函式執行的任何時刻中斷它,轉入os排程下去執行另一段 而返回控制時不出現錯誤,這意味著它除了使用自己棧上的變數以外,不依賴於任何環境 包括static 這樣的函式就是purecode 純 可重入,它可以允許該...
可重入函式與不可重入函式
可重入 可重新進入,也即兩次進入的現場一模一樣?在實時系統的設計中,經常會出現多個任務呼叫同乙個函式的情況。如果這個函式不幸被設計成為不可重入的函式的話,那麼不同任務呼叫這個函式時可能修改其他任務呼叫這個函式的資料,從而導致不可預料的後果。那麼什麼是可重入函式呢?所謂可重入是指乙個可以被多個任務呼叫...