ĐH BÁCH KHOA TP.HCM * KHOA ĐIỆN - ĐIỆN TỬ * BỘ MÔN ĐIỆN TỬ ĐỀ THI HỌC KỲ MƠN: LẬP TRÌNH NHÚNG Thời gian: 90 phút (SV sử dụng tài liệu, không sử dụng laptop, máy vi tính) Câu 1: (4đ) Một hệ thống điều khiển nhiệt độ hoạt động sau: • Bật lò đốt nhiệt độ đo nhỏ 100 Thời gian lần đọc 100 ms • Trong bật lò, chớp nháy LED với chu kỳ 1s để báo cho người dùng biết lò bật Khi tắt lò LED thơi khơng chớp nháy Các hàm cho sẵn sau: int readTemp(void) : trả giá trị nhiệt độ void turnHeaterOn(void) : bật lò void turnHeaterOff(void) : tắt lò void setLed() : bật LED void clearLed() : tắt LED void initSysTick(unsigned int number_ms) : khởi động ngắt systemTick với chu kỳ number_ms milisecond • void Systick_ISR(void) : chương trình phục vụ ngắt systemTick Sinh viên tự thực hàm câu c • • • • • • a) Thiết kế máy trạng thái cho hệ thống (1.5đ) Hướng dẫn: Chia làm máy trạng thái đồng dùng biến chung (shared variable) b) Time interval hệ thống bao nhiêu? (0.5đ) c) Viết chương trình thực thi hệ thống theo máy trạng thái thiết kế (2đ) Câu 2: (2đ) Cho chương trình assembly sau cho ARM Cortex M3: sub_func MOV R3, R0 PUSH {R4,LR} MOVS R0, #0 MOV R2, R0 B loc_448 loc_440 LSLS R4, R2, #2 LDR R4, [R3,R4] ADDS R0, R4, R0 ADDS R2, R2, #1 loc_448 CMP R2, R1 BLT loc_440 LDR R1, =0x55555555 EORS POP R0, R1 {R4,PC} a) Đoạn chương trình làm cơng việc gì? Giải thích (1đ) b) Viết chương trình tương ứng dùng ngôn ngữ C (1đ) Câu 3: (4đ) Cho đoạn chương trình dùng FreeRTOS sau, hàm vPrintString xuất chuỗi serial port Thời gian hàm thực thi 20 ms Hàm toggleLED() dùng để đảo trạng thái LED Hàm thực thi thời gian ngắn void vTask1( void *pvParameters ); void vTask2( void *pvParameters ); void vTask3( void *pvParameters ); int main( void ) { xTaskCreate( vTask1, "Task 1", 200,NULL, 1,NULL ); xTaskCreate( vTask2, "Task 2", 200, NULL, 2, NULL ); xTaskCreate( vTask3, "Task 3", 200, NULL, 3, NULL ); vTaskStartScheduler(); for( ;; ); } void vTask1( void *pvParameters ) { const char *pcTaskName = "Task is running\n"; for( ;; ) { vPrintString( pcTaskName ); vTaskDelay( 10 / portTICK_RATE_MS ); } } void vTask2( void *pvParameters ) { const char *pcTaskName = "Task is running\n"; for( ;; ) { vPrintString( pcTaskName ); vTaskDelay( 10 / portTICK_RATE_MS ); } } void vTask3( void { for( ;; ) *pvParameters ) { toggleLED(); vTaskDelay( 250 / portTICK_RATE_MS ); } } a) Hãy vẽ giản đồ thực thi tác vụ theo thời gian giải thích (1đ) (Thang thời gian khơng cần theo tỉ lệ xác, cần thích rõ thời gian) b) Hiện tượng lỗi xung đột xảy ra? Giải thích (1đ) c) Hãy sửa lại chương trình dùng semaphore để khắc phục lỗi (2đ) BM Điện Tử Cán đề Bùi Quốc Bảo ... R2, #1 loc_448 CMP R2, R1 BLT loc_440 LDR R1, =0x55555555 EORS POP R0, R1 {R4,PC} a) Đoạn chương trình làm cơng việc gì? Giải thích (1 ) b) Viết chương trình tương ứng dùng ngôn ngữ C (1 ) Câu... vTask1, "Task 1" , 200,NULL, 1, NULL ); xTaskCreate( vTask2, "Task 2", 200, NULL, 2, NULL ); xTaskCreate( vTask3, "Task 3", 200, NULL, 3, NULL ); vTaskStartScheduler(); for( ;; ); } void vTask1(... vPrintString xuất chuỗi serial port Thời gian hàm thực thi 20 ms Hàm toggleLED() dùng để đảo trạng thái LED Hàm thực thi thời gian ngắn void vTask1( void *pvParameters ); void vTask2( void *pvParameters