基於原始碼學習ThreadX 一 官方例程分析

2021-10-24 17:23:41 字數 3681 閱讀 5660

包含所有的系統資料結構,服務原型等。

#include

"tx_api.h"

定義棧大小、位元組池容量、塊容量、佇列數量

#define demo_stack_size         1024

#define demo_byte_pool_size 9120

#define demo_block_pool_size 100

#define demo_queue_size 100

定義了執行緒、訊息佇列、訊號量、互斥量、事件標誌組、位元組池、塊池、堆疊空間等

/* 執行緒 */

tx_thread thread_0;

tx_thread thread_1;

tx_thread thread_2;

tx_thread thread_3;

tx_thread thread_4;

tx_thread thread_5;

tx_thread thread_6;

tx_thread thread_7;

/* 訊息佇列 */

tx_queue queue_0;

/* 訊號量 */

tx_semaphore semaphore_0;

/* 互斥量 */

tx_mutex mutex_0;

/* 事件標誌組 */

tx_event_flags_group event_flags_0;

/* 位元組池 */

tx_byte_pool byte_pool_0;

/* 塊池 */

tx_block_pool block_pool_0;

/* 堆疊空間 */

uchar memory_area[demo_byte_pool_size]

;

ulong                   thread_0_counter;

ulong thread_1_counter;

ulong thread_1_messages_sent;

ulong thread_2_counter;

ulong thread_2_messages_received;

ulong thread_3_counter;

ulong thread_4_counter;

ulong thread_5_counter;

ulong thread_6_counter;

ulong thread_7_counter;

宣告執行緒入口函式

void

thread_0_entry

(ulong thread_input)

;void

thread_1_entry

(ulong thread_input)

;void

thread_2_entry

(ulong thread_input)

;void

thread_3_and_4_entry

(ulong thread_input)

;void

thread_5_entry

(ulong thread_input)

;void

thread_6_and_7_entry

(ulong thread_input)

;

所有功能初始化後,才可以進入 main 函式。

主函式僅僅呼叫 tx_kernel_enter。

/* 定義主函式入口 */

intmain()

/* 具有錯誤檢測的服務 */

#define tx_kernel_enter _tx_initialize_kernel_enter

void  _tx_initialize_kernel_enter

(void)

_tx_thread_system_state = tx_initialize_in_progress;

/* 呼叫應用初始化程式,參量為第乙個可用記憶體位址 */

(_tx_initialize_unused_memory)

;/* 設定系統狀態,準備進入執行緒排程 */

_tx_thread_system_state = tx_initialize_is_finished;

/* 開始排程執行緒 */

_tx_thread_schedule()

;}

在主程式中由tx_kernel_enter呼叫。

思路:定義一塊大空間的陣列作為堆疊空間,用以分配給於位元組池;

從位元組池中取出pointer指標位址以及池容量,分配給予執行緒、訊息佇列、塊池;

訊號量、互斥量、事件標誌無需位元組池分配空間;

當所有消費者獲取過位元組池後,位元組池統計剩餘空間,並進行釋放。

void

(void

*first_unused_memory)

建立執行緒0

void

thread_0_entry

(ulong thread_input)

}

建立執行緒1:與執行緒2共享訊息佇列(作為傳送)

void

thread_1_entry

(ulong thread_input)

}

建立執行緒2:與執行緒1共享訊息佇列(作為接收)

void

thread_2_entry

(ulong thread_input)

}

建立執行緒3和4:通過入參選擇執行具體函式,獲取不到訊號量的執行緒會一直等待,直到另乙個執行緒釋放訊號量。

void

thread_3_and_4_entry

(ulong thread_input)

}

建立執行緒5

void

thread_5_entry

(ulong thread_input)

}

建立執行緒6和7

void

thread_6_and_7_entry

(ulong thread_input)

}

Spring原始碼學習(一)

人對神秘的東西即好奇又恐懼,好奇心使人想一 竟恐懼心又使人望而卻步,工作了那麼久對spring原始碼一直懷有這樣的心態,從來沒有下決心進行研讀,最近感覺壓力在攀公升,使自己不得不戰勝恐懼心,進行更深入的學習,希望自己的學習同樣也能給你小夥伴們帶來一絲靈感。接下來將更加一下小例子來跟讀一下原始碼的實現...

tensorflow 原始碼學習 一

作為主流的機器學習框架,tensorflow的提供的介面變化很多,專案 也比較複雜,為了讓自己使用起來更得心應手,所以覺得還是有必要學習一下原始碼。個人覺得提公升程式設計水平的兩種最好方式,乙個是自己造輪子,再乙個就是閱讀原始碼。1.版本 2.整體專案結構 這並不是tensorflow完整的專案結構...

ZedGraph原始碼學習(一)

因工作原因,學習相關zedgraph原始碼來解決一些問題。剛看到這個開源圖表控制項時,感覺還是短小精悍的。結合zedgraph控制項的例子大致看了下對應的原始碼,寫下點感悟。這裡先大致說一些zedgraph裡的元素。1.panel zedgraph控制項是如何畫出來的,就是這這個上面畫出來,後面的元...