#include
"freertos.h"
#include
"task.h"
#include
"queue.h"
#include
"semphr.h"
#include
"os_start.h"
#define start_task_prio 1
#define start_stk_size 128
taskhandle_t starttask_handler;
void
start_task
(void
*pvparameters)
;#define keyscan_task_prio 2
#define keyscan_stk_size 50
taskhandle_t keyscantask_handler;
void
keyscan_task
(void
*pvparameters)
;#define keyprocess_task_prio 3
#define keyprocess_stk_size 50
taskhandle_t keyprocesstask_handler;
void
keyprocess_task
(void
*pvparameters)
;#define keymsg_q_length 1
//佇列長度
#define rxmsg_q_length 4
#define rx_buf_num 30
uint8_t rx_buf[rx_buf_num]
;uint8_t rx_hal_buff_temp[2]
;//hal函式接收臨時快取
queuehandle_t key_queue;
//按鍵佇列
queuehandle_t uartrx_queue;
//訊息佇列
semaphorehandle_t countersemaphore;
//計數型訊號量控制代碼
void
os_start
(void
)//開始任務任務函式
void
start_task
(void
*pvparameters)
//建立led1任務
xtaskcreate
((taskfunction_t )keyscan_task,
(const
char*)
"led1_task"
,(uint16_t )keyscan_stk_size,
(void*)
null
,(ubasetype_t )keyscan_task_prio,
(taskhandle_t*
)&keyscantask_handler)
;//建立key任務
xtaskcreate
((taskfunction_t )keyprocess_task,
(const
char*)
"keyprocess_task"
,(uint16_t )keyprocess_stk_size,
(void*)
null
,(ubasetype_t )keyprocess_task_prio,
(taskhandle_t*
)&keyprocesstask_handler)
;vtaskdelete
(starttask_handler)
;//刪除開始任務
taskexit_critical()
;//退出臨界區
}//keyscan任務函式
void
keyscan_task
(void
*pvparameters)
else
} keyvalue =0;
}}vtaskdelay(10
);}}
//key任務函式
void
keyprocess_task
(void
*pvparameters)
}else
vtaskdelay
(1000);
}}
FreeRTOS 計數訊號量
計數訊號量有兩種典型的用法 1.事件計數 每次事件發生時,中斷isr會釋放 give 訊號量,訊號量的計數值加1 事件處理任務每次處理乙個事件會獲取 take 一次訊號量,計數值減1.訊號量的值就是已發生事件數目與已處理事件數目之間的差值。用於事件的計數的計數訊號量,在被建立時其計數值被初始化為0。...
計數型訊號量
目錄 計數型訊號量 1.create 2.delete 3.wait 4.post 5.clear 6.status 7.getname 計數型訊號量通常用於多個執行緒共享使用某資源。下圖 乙個 sylixos 計數型訊號量可以呼叫 lw semaphorec create 函式進行建立。inclu...
FreeRTOS 互斥訊號量
0.前言 在嵌入式作業系統中互斥型訊號量是任務間資源保護的重要手段。下面結合乙個具體例子說明freertos中的互斥型訊號量如何使用。1.基本說明 互斥型訊號量的使用方法如圖1所示。在多數情況下,互斥型訊號量和二值型訊號非常相似,但是從功能上二值型訊號量用於同步,而互斥型訊號量用於資源保護。互斥型訊...