You are on page 1of 11

1.

Task Creation

a) xTaskCreate

- xTaskCreate(

vTaskCode, /* Function that implements the task. */

"NAME", /* Text name for the task. */

STACK_SIZE, /* Stack size in words, not bytes. */

( void * ) 1, /* Parameter passed into the task. */

tskIDLE_PRIORITY,/* Priority at which the task is created. */

&xHandle

);

- Tạo một tác vụ mới và thêm nó vào danh sách các tác vụ đã sẵn sàng để chạy.

- configSUPPORT_DYNAMIC_ALLOCATION phải được đặt thành 1 trong FreeRTOSConfig.h hoặc


không được xác định (trong trường hợp đó nó sẽ mặc định là 1).

-Nếu một tác vụ được tạo bằng xTaskCreate() thì RAM cần thiết sẽ tự động được

được phân bổ từ vùng nhớ FreeRTOS.

- Example

b) xTaskCreatestatic

- xTaskCreateStatic(

vTaskCode, /* Function that implements the task. */

"NAME", /* Text name for the task. */

STACK_SIZE, /* Number of indexes in the xStack array. */

( void * ) 1, /* Parameter passed into the task. */

tskIDLE_PRIORITY,/* Priority at which the task is created. */

xStack, /* Array to use as the task's stack. */

&xTaskBuffer ); /* Variable to hold the task's data structure. */

- Tác vụ được tạo bằng cách sử dụng xTaskCreateStatic() thì RAM sẽ do người viết ứng dụng cung
cấp, điều này dẫn đến số lượng tham số lớn hơn nhưng cho phép RAM được phân bổ tĩnh tại thời gian
biên dịch.

c) vTaskDelete

- Tác vụ bị xóa sẽ bị xóa khỏi tất cả danh sách ready, blocked, suspended and event.
2. Task Control

a) vTaskDelay

- void vTaskDelay( const TickType_t xTicksToDelay );

- Trì hoãn một nhiệm vụ với trong một thời gian nhất định.

b) vTaskDelayUntil

- void vTaskDelayUntil( TickType_t *pxPreviousWakeTime,

const TickType_t xTimeIncrement );


+ pxPreviousWakeTime: Con trỏ tới một biến chứa thời gian mà tác vụ được bỏ chặn lần cuối.

+ xTimeIncrement: Khoảng thời gian chu kỳ. Tác vụ sẽ được bỏ chặn tại thời điểm
(*pxPreviousWakeTime + xTimeIncrement).

- Trì hoãn một nhiệm vụ cho đến một thời điểm nhất định. Chức năng này có thể được sử dụng định kỳ

nhiệm vụ để đảm bảo tần suất thực hiện liên tục.

- vTaskDelay() chỉ định thời gian tạimà tác vụ muốn bỏ chặn tương ứng với thời điểm vTaskDelay() được
gọi, trong khi vTaskDelayUntil() chỉ định thời gian tuyệt đối mà tác vụ muốn bỏ chặn.

c) xTaskDelayUntil

- xTaskDelayUntil( TickType_t *pxPreviousWakeTime,

const TickType_t xTimeIncrement );


+ pxPreviousWakeTime: Con trỏ tới một biến chứa thời gian mà tác vụ được bỏ chặn lần cuối.

+ xTimeIncrement: Khoảng thời gian chu kỳ. Tác vụ sẽ được bỏ chặn tại thời điểm
(*pxPreviousWakeTime + xTimeIncrement).

- Trì hoãn một nhiệm vụ cho đến một thời điểm nhất định. Chức năng này có thể được sử dụng định kỳ

nhiệm vụ để đảm bảo tần suất thực hiện liên tục.

- Sử dụng vTaskDelayUntil nếu bạn không quan tâm đến giá trị trả về, hoặc xTaskDelayUntil nếu bạn
muốn sử dụng giá trị trả về để kiểm soát quy trình thời gian trong task của mình.

d) uxTaskPriorityGet

- uxTaskPriorityGet( const TaskHandle_t xTask );


- Hàm uxTaskPriorityGet được sử dụng để lấy giá trị ưu tiên (priority) của một task cụ thể.

e) vTaskPrioritySet

- void vTaskPrioritySet( TaskHandle_t xTask,

UBaseType_t uxNewPriority );
+ xTask: Đối tượng task cần thay đổi độ ưu tiên.

+ uxNewPriority: Giá trị độ ưu tiên mới mà bạn muốn đặt cho task.

- Hàm vTaskPrioritySet được sử dụng để đặt độ ưu tiên cho một nhiệm vụ (task).

f) vTaskSuspend

- void vTaskSuspend( TaskHandle_t xTaskToSuspend );

+ xTaskToSuspend: Task handle của nhiệm vụ cần được tạm dừng.

- Hàm vTaskSuspend được sử dụng để tạm dừng (suspend) một nhiệm vụ (task). Khi một nhiệm vụ được
tạm dừng, nó không tham gia vào việc lập lịch thực hiện nữa cho đến khi nó được tiếp tục.

h) vTaskResume

- void vTaskResume( TaskHandle_t xTaskToResume );

+ xTaskToResume: Task handle của nhiệm vụ cần được tiếp tục.

- Hàm vTaskResume trong FreeRTOS được sử dụng để tiếp tục thực hiện một nhiệm vụ (task) mà trước
đó đã bị tạm dừng bằng hàm vTaskSuspend. Khi một nhiệm vụ được tiếp tục, nó sẽ quay lại tham gia vào
lập lịch thực hiện và tiếp tục thực hiện các công việc của mình.

i) xTaskAbortDelay
- xTaskAbortDelay( TaskHandle_t xTask );
+ xTaskToAbort: Task handle của nhiệm vụ cần hủy bỏ thời gian chờ.

- Hàm trả về giá trị pdPASS nếu quá trình hủy bỏ thành công và pdFAIL nếu có lỗi.

- Hàm xTaskAbortDelay được sử dụng để hủy bỏ việc chờ đợi (delay) của một nhiệm vụ (task). Khi một
nhiệm vụ sử dụng hàm vTaskDelay để đưa nó vào trạng thái chờ đợi trong một khoảng thời gian nhất
định, bạn có thể sử dụng xTaskAbortDelay để hủy bỏ thời gian chờ đó và đưa nhiệm vụ trở lại trạng thái
chạy ngay lập tức.

3) Queues

a) xQueueCreate
-xQueueCreate( UBaseType_t uxQueueLength,
UBaseType_t uxItemSize );
+ uxQueueLength: Số phần tử tối đa mà hàng đợi có thể giữ được. Điều này xác định kích thước
tối đa của hàng đợi.
+ uxItemSize: Kích thước của mỗi phần tử trong hàng đợi, tính bằng byte. Kích thước này xác
định bao nhiêu byte sẽ được cấp phát cho mỗi phần tử trong hàng đợi.

-Hàm trả về một con trỏ kiểu QueueHandle_t (thực tế là một con trỏ đến một cấu trúc dữ liệu hàng đợi)
mà các hàm khác sẽ sử dụng để thao tác với hàng đợi.

- Hàm xQueueCreate được sử dụng để tạo một hàng đợi (queue).

b) xQueueCreateStatic
-xQueueCreateStatic(
UBaseType_t uxQueueLength,
UBaseType_t uxItemSize,
uint8_t *pucQueueStorageBuffer,
StaticQueue_t *pxQueueBuffer );
+ uxQueueLength: Số phần tử tối đa mà hàng đợi có thể giữ được.

+ uxItemSize: Kích thước của mỗi phần tử trong hàng đợi, tính bằng byte.

+ pucQueueStorageBuffer: Con trỏ đến mảng byte có kích thước đủ để lưu trữ hàng đợi và dữ
liệu của nó. Bạn cần đảm bảo rằng bộ nhớ này có thể tồn tại và không bị phá hủy trong suốt thời
gian tồn tại của hàng đợi.

+ pxQueueBuffer: Con trỏ đến một biến kiểu StaticQueue_t, là một cấu trúc dữ liệu cần thiết để
quản lý bộ nhớ tĩnh cho hàng đợi.

- xQueueCreateStatic là một biến thể của hàm tạo hàng đợi (xQueueCreate), nhưng nó cho phép bạn
cung cấp bộ nhớ tĩnh (static memory) để lưu trữ cấu trúc dữ liệu hàng đợi.

c) vQueueDelete
- vQueueDelete( QueueHandle_t xQueue );
+ xQueue: Task handle của hàng đợi cần bị xóa.

- Hàm vQueueDelete được sử dụng để xóa (hoặc giải phóng) tài nguyên của một hàng đợi (queue) đã
được tạo trước đó bằng một trong các hàm tạo hàng đợi như xQueueCreate hoặc xQueueCreateStatic.

d) xQueueSend

- xQueueSend(

QueueHandle_t xQueue,
const void * pvItemToQueue,
TickType_t xTicksToWait
);
+ xQueue: Task handle của hàng đợi mà bạn muốn gửi dữ liệu vào.

+pvItemToQueue: Con trỏ đến dữ liệu bạn muốn gửi vào hàng đợi.

+xTicksToWait: Thời gian tối đa mà hàm sẽ chờ nếu hàng đợi đầy. Nếu xTicksToWait được đặt là
portMAX_DELAY, hàm sẽ chờ cho đến khi có thể gửi dữ liệu vào hàng đợi.
- Hàm trả về pdPASS nếu dữ liệu được gửi thành công vào hàng đợi và errQUEUE_FULL nếu hàng đợi đầy
và thời gian chờ đã hết.

- Hàm xQueueSend trong FreeRTOS được sử dụng để gửi một phần tử dữ liệu vào hàng đợi (queue).

e) xQueueReceive

- xQueueReceive(

QueueHandle_t xQueue,
void *pvBuffer,
TickType_t xTicksToWait
);
+ xQueue: Task handle của hàng đợi mà bạn muốn nhận dữ liệu từ.

+ pvBuffer: Con trỏ đến vùng nhớ nơi dữ liệu nhận được sẽ được lưu trữ.

+ xTicksToWait: Thời gian tối đa mà hàm sẽ chờ nếu hàng đợi trống. Nếu xTicksToWait được đặt
là portMAX_DELAY, hàm sẽ chờ cho đến khi có dữ liệu để nhận từ hàng đợi.

- Hàm trả về pdPASS nếu dữ liệu đã được nhận thành công từ hàng đợi và errQUEUE_EMPTY nếu hàng
đợi trống và thời gian chờ đã hết.

- Hàm xQueueReceive trong FreeRTOS được sử dụng để nhận một phần tử dữ liệu từ hàng đợi (queue).

f) xQueueReset
- xQueueReset( QueueHandle_t xQueue );
+ xQueue: Task handle của hàng đợi cần được đặt lại.

- Hàm xQueueReset được sử dụng để đặt lại (reset) nội dung của hàng đợi (queue) mà không xóa bộ nhớ
của hàng đợi. Nó có thể được sử dụng để làm sạch dữ liệu trong hàng đợi mà không làm thay đổi cấu
trúc cơ bản của hàng đợi.

g) xQueueOverwrite

- xQueueOverwrite(

QueueHandle_t xQueue,
const void * pvItemToQueue
);
+ xQueue: Task handle của hàng đợi mà bạn muốn ghi đè dữ liệu.

+ pvItemToQueue: Con trỏ đến dữ liệu bạn muốn ghi vào hàng đợi.

- Hàm trả về pdPASS nếu dữ liệu đã được ghi đè thành công và errQUEUE_FULL nếu hàng đợi đầy.

- Hàm xQueueOverwrite được sử dụng để ghi đè (overwrite) dữ liệu vào hàng đợi (queue) mà không chờ
đợi nếu hàng đợi đầy. Nếu hàng đợi đang đầy, hàm này sẽ ghi đè dữ liệu mới vào đầu hàng đợi, loại bỏ
dữ liệu cũ nếu có.

h) xQueuePeek
- xQueuePeek(

QueueHandle_t xQueue,
void *pvBuffer,
TickType_t xTicksToWait
);
+ xQueue: Task handle của hàng đợi mà bạn muốn xem dữ liệu từ.

+ pvBuffer: Con trỏ đến vùng nhớ nơi dữ liệu được xem sẽ được lưu trữ.

+ xTicksToWait: Thời gian tối đa mà hàm sẽ chờ nếu hàng đợi trống. Nếu xTicksToWait được đặt
là portMAX_DELAY, hàm sẽ chờ cho đến khi có dữ liệu để xem từ hàng đợi.

- Hàm trả về pdPASS nếu dữ liệu đã được xem từ hàng đợi và errQUEUE_EMPTY nếu hàng đợi trống và
thời gian chờ đã hết.

- Hàm xQueuePeek trong FreeRTOS được sử dụng để xem (peek) dữ liệu từ đầu của hàng đợi mà không
loại bỏ dữ liệu khỏi hàng đợi.

4) Semaphore / Mutexes

a) xSemaphoreTake

-xSemaphoreTake( SemaphoreHandle_t xSemaphore,

TickType_t xTicksToWait );
+ xSemaphore: Con trỏ đến binary semaphore cần được "lấy" (take).

+ xTicksToWait: Thời gian tối đa (trong ticks) mà nhiệm vụ sẽ chờ trước khi trả về pdFAIL nếu
semaphore không được báo hiệu. Nếu bạn muốn chờ vô hạn, bạn có thể sử dụng giá trị
portMAX_DELAY

- Nếu semaphore được "lấy" thành công, hàm trả về pdPASS (thường được định nghĩa là 1). Nếu
semaphore không được "lấy" trong khoảng thời gian chờ, hàm trả về pdFAIL (thường được định nghĩa là
0).

- xSemaphoreTake được sử dụng để đợi (chờ) và sở hữu (take) một binary semaphore. Nhiệm vụ sẽ bị
chặn cho đến khi binary semaphore được báo hiệu (signaled).

b) xSemaphoreGive

- xSemaphoreGive( SemaphoreHandle_t xSemaphore );


+ xSemaphore: Con trỏ đến binary semaphore cần được "đưa" (give).

- Nếu thao tác thành công, hàm trả về pdPASS (thường được định nghĩa là 1). Nếu thất bại, hàm trả về
pdFAIL (thường được định nghĩa là 0).

- xSemaphoreGive được sử dụng để báo hiệu rằng một tài nguyên đã sẵn sàng để sử dụng. Nó thường
được sử dụng khi một nhiệm vụ đã thực hiện xong công việc và muốn thông báo cho các nhiệm vụ khác
biết rằng tài nguyên đã sẵn sàng hoặc giải phóng một semaphore đã được "take" trước đó.
c) xSemaphoreCreateBinary

- xSemaphoreCreateBinary( void );
- Hàm xSemaphoreCreateBinary trong FreeRTOS được sử dụng để tạo một binary semaphore. Binary
semaphore là một kiểu đặc biệt của semaphore với giá trị ban đầu là 1 và chỉ có thể nhận giá trị 0 hoặc 1.
Binary semaphore thường được sử dụng để đồng bộ hóa và đặt ra hai trạng thái: đã có tài nguyên (1)
hoặc không có tài nguyên (0).

- Binary semaphore thường được sử dụng cùng với xSemaphoreTake và xSemaphoreGive.

d) xSemaphoreCreateCounting
- xSemaphoreCreateCounting( UBaseType_t uxMaxCount,
UBaseType_t
uxInitialCount);
+ uxMaxCount: Số lượng tối đa mà counting semaphore có thể giữ.

+ uxInitialCount: Số lượng ban đầu của counting semaphore.

- Nếu tạo thành công, hàm trả về con trỏ đến counting semaphore mới tạo. Nếu có lỗi hoặc không đủ bộ
nhớ, hàm trả về NULL.

- xSemaphoreCreateCounting được sử dụng để tạo một counting semaphore, một loại semaphore có thể
giữ một số lượng tài nguyên cụ thể. Counting semaphore có thể giữ một số lượng lớn hơn một tài
nguyên( có nhiều giá trị hơn binary).

e) xSemaphoreCreateMutex
- xSemaphoreCreateMutex( void )
- Nếu tạo thành công, hàm trả về con trỏ đến mutex mới tạo. Nếu có lỗi hoặc không đủ bộ nhớ, hàm trả
về NULL.

- xSemaphoreCreateMutex được sử dụng để tạo một mutex, một loại semaphore kiểm soát truy cập độc
quyền đến một tài nguyên.

f) xSemaphoreCreateRecursiveMutex
- xSemaphoreCreateRecursiveMutex( void )
- Nếu tạo thành công, hàm trả về con trỏ đến mutex đệ quy mới tạo. Nếu có lỗi hoặc không đủ bộ nhớ,
hàm trả về NULL.
- xSemaphoreCreateRecursiveMutex được sử dụng để tạo một mutex đệ quy, nơi một nhiệm vụ có thể sở
hữu lại mutex mà nó đã sở hữu mà không gặp phải deadlock.

g) xSemaphoreDelete

- void vSemaphoreDelete( SemaphoreHandle_t xSemaphore );

+ xSemaphore : The handle of the semaphore being deleted.

- xSemaphoreDelete dùng để xoá semaphore, bao gồm cả mutex semaphores và recursive semaphores.
Không xoá semaphore có các tác vụ bị chặn trên đó (các tác vụ nằm trong trạng thái blocked đang chờ
semaphore khả dụng).

5. Software Timers

a) xTimerCreate
- xTimerCreate
( const char * const pcTimerName,
const TickType_t xTimerPeriod,
const UBaseType_t uxAutoReload,
void * const pvTimerID,
TimerCallbackFunction_t pxCallbackFunction );
+ pcTimerName: Tên của timer (chỉ định cho mục đích debug).

+xTimerPeriodInTicks: Chu kỳ của timer trong ticks.uxAutoReload: Số lần lặp lại của timer (0 nếu
không lặp lại, non-zero nếu lặp lại).

+pvTimerID: Con trỏ đến dữ liệu cụ thể cho timer (có thể là NULL).

+pxCallbackFunction: Hàm callback được gọi khi timer đến hạn.

- Nếu tạo thành công, hàm trả về con trỏ đến timer mới tạo. Nếu có lỗi hoặc không đủ bộ nhớ, hàm trả
về NULL.

- Hàm xTimerCreate trong FreeRTOS được sử dụng để tạo một đối tượng timer. Timer là một cơ chế
trong FreeRTOS giúp bạn thực hiện các hoạt động định kỳ hoặc trễ giờ trong các ứng dụng đa nhiệm thời
gian thực.

b) xTimerStart
- xTimerStart( TimerHandle_t xTimer,
TickType_t xBlockTime );
+ xTimer: Con trỏ đến timer cần bắt đầu.

+ xBlockTimeTicks: Thời gian chờ (trong ticks) nếu không khởi động được timer ngay lập tức.
- Nếu bắt đầu thành công, hàm trả về pdPASS (1). Nếu không thành công, hàm trả về pdFAIL (0).

- Hàm xTimerStart trong FreeRTOS được sử dụng để khởi động hoạt động của một đối tượng timer. Sau
khi một timer được tạo bằng xTimerCreate, nó không tự động bắt đầu tính thời gian hoặc thực hiện hành
động gì cả. xTimerStart được sử dụng để bắt đầu hoạt động của timer và bắt đầu tính thời gian.

c) xTimerStop
- xTimerStop( TimerHandle_t xTimer,
TickType_t xBlockTime );
+ xTimer: Con trỏ đến timer cần dừng.

+ xBlockTimeTicks: Thời gian chờ (trong ticks) nếu không dừng được timer ngay lập tức.

- Nếu dừng thành công, hàm trả về pdPASS (1). Nếu không thành công, hàm trả về pdFAIL (0).

- Hàm xTimerStop trong FreeRTOS được sử dụng để dừng một timer, làm cho nó ngưng tính thời gian và
ngưng hoạt động của nó. Khi một timer được dừng, nó sẽ không kích hoạt hành động callback và không
tiếp tục tính thời gian cho đến khi được khởi động lại bằng cách sử dụng hàm xTimerStart.

d) xTimerChangePeriod
- xTimerChangePeriod( TimerHandle_t xTimer,
TickType_t xNewPeriod,
TickType_t xBlockTime );
+ xTimer: Con trỏ đến timer cần thay đổi chu kỳ.

+ xNewPeriodTicks: Chu kỳ mới của timer trong ticks.

+ xBlockTimeTicks: Thời gian chờ (trong ticks) nếu không thay đổi được ngay lập tức.

- Nếu thay đổi thành công, hàm trả về pdPASS (1). Nếu không thành công, hàm trả về pdFAIL (0).

- Hàm xTimerChangePeriod trong FreeRTOS được sử dụng để thay đổi chu kỳ của một timer, tức là thời
gian giữa các lần kích hoạt của timer. Điều này cho phép bạn điều chỉnh tần suất với mà timer sẽ gọi hàm
callback của nó.

e) xTimerDelete
- xTimerDelete( TimerHandle_t xTimer,
TickType_t xBlockTime );
+ xTimer: Con trỏ đến timer cần xóa.

+ xBlockTime: Thời gian chờ (trong ticks) nếu không xóa được ngay lập tức.

- Hàm xTimerDelete trong FreeRTOS được sử dụng để xóa một timer đã được tạo trước đó. Khi bạn đã
không cần sử dụng một timer nữa, việc xóa nó giúp giải phóng tài nguyên và tránh rò rỉ bộ nhớ.

f) xTimerReset
- xTimerReset( TimerHandle_t xTimer,
TickType_t xBlockTime );
+ xTimer: Con trỏ đến timer cần đặt lại.
+ xBlockTimeTicks: Thời gian chờ (trong ticks) nếu không đặt lại được ngay lập tức.

- Nếu đặt lại thành công, hàm trả về pdPASS (1). Nếu không thành công, hàm trả về pdFAIL (0).

- Hàm xTimerReset trong FreeRTOS được sử dụng để thiết lập lại thời gian đếm của một timer về giá trị
ban đầu của nó. Nó có thể được sử dụng để bắt đầu lại chu kỳ của timer mà không cần phải dừng và khởi
động lại nó.
-

You might also like