Bài 1: Quản lý ngắt sử dụng QueueViết chương trình tạo Task_Printer đọc chuỗi kí tự từ hàng đợi StringQueue và in chuỗi đó ramàn hình Serial Monitor. Các phần tử của hàng đợi được ghi bởi một chương trình con phụcvụ ngắt (ISR) sử dụng Timer1 của Arduino.Bài 2: xQueuePeek, xQueueOverwriteViết chương trình tạo 2 tác vụ có cùng mức ưu tiên, trong đó: Task1: Tạo queue có 3 phần tử kiểu chuỗi kí tự (tối đa 15 kí tự); nhập vào queue 2phần tử cho trước (message 1; message 2), sau đó ghi đè vào 1 phần tử khác (message3). In ra “Data waiting to be read: n” (n là số lượng phần tử có thể đọc ra); và“Available spaces: m” (m là số không gian trống trong queue) Task2: Đọc dữ liệu từ Queue với hàm xQueuePeek và in ra màn hìnhBài 3: Thay đổi mức ưu tiên của tác vụViết chương trình tạo 2 tác vụ Task1, Task2 có mức ưu tiên tương ứng là 2, 1 trước khi gọitrình lập lịch. Trong đó: Kích thước ngăn xếp 64 từ máy (words); Task1: In ra màn hình “Task1 is running, N” cứ mỗi 1s, N là biến đếm khởi tạo bằng0. Nếu N =4 thì thay đổi mức ưu tiên của Task2 thành 3 và in ra màn hình “Back fromTask2”. Task2: Thay đổi mức ưu tiên của mình thành 2, và cứ mỗi 1s in ra màn hình “Task2 isrunning”Bài 4: Lập trình vàora trên Arduino với UARTLập trình giao tiếp giữa hai Arduino sử dụng giao thức UART, với yêu cầu sau: 1 board gửi kí tự X và giá trị 235 sang cho board nhận cứ mỗi 0,5s Board nhận có kết nối LCD I2C và hiển thị đúng ký tự và giá trị nhận về lên dòng thứ2 của LCDBài 5: QueueViết chương trình thực hiện tạo hai tác vụ có tên “Task1”, “Task2” sao cho: Cả 2 tác vụ có: Stack 250 từ máy (word), mức ưu tiên (tskIDLE_PRIORITY + 1),Handle lần lượt là HTask1, HTask2 Task1 thực hiện tạo hàng đợi có tên “CT2Queue” có 6 phần tử kiểu chuỗi 20 ký tự;gửi 3 chuỗi ký tự (“CT02Hello”; “DT01Hi”; “ATWelcome” cho trước) vào hàngđợi. Task2 đọc từng phần tử từ hàng đợi và lần lượt in ra màn hình sau mỗi lần đọc các nộidung sau: giá trị của phần tử; số phần tử có thể đọc ra từ hàng đợi và không gian khảdụng còn lại tương ứng của hàng đợi.
HỆ ĐIỀU HÀNH NHÚNG THỜI GIAN THỰC Bài 1: Quản lý ngắt sử dụng Queue Viết chương trình tạo Task_Printer đọc chuỗi kí tự từ hàng đợi StringQueue in chuỗi hình Serial Monitor Các phần tử hàng đợi ghi chương trình phục vụ ngắt (ISR) sử dụng Timer1 Arduino #include #include "queue.h" QueueHandle_t xStringQueue; int timer1_counter ; void setup(){ Serial.begin(9600); xTaskCreate(vStringPrinter," String Printer", 100, NULL, 1,NULL); xStringQueue = xQueueCreate(5,sizeof(char *)); InterruptInit(); } void vStringPrinter(void *pvParameters) { char *pcString; while(1) { xQueueReceive(xStringQueue,&pcString,portMAX_DELAY); Serial.println(pcString); } } ISR(TIMER1_OVF_vect) { TCNT1 = timer1_counter; uint32_t receivedNumber; static const char *pcStrings[]= { "Hello\r\n", "Hi\r\n", "I\r\n", "am\r\n", "here\r\n", }; xQueueSendToBackFromISR(xStringQueue,&pcStrings[0],pdFALSE); } void loop(){} void InterruptInit() { noInterrupts(); TCCR1A =0; TCCR1B =0; timer1_counter = 34286; TCNT1 = timer1_counter; TCCR1B |=(1