ĐỀ THI HỌC KỲ 1
MÔN: LẬP TRÌNH NHÚNG
Thời gian: 90 phút
(SV được 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 như sau:
• Bật lò đốt khi nhiệt độ đo được nhỏ hơn 100. Thời gian giữa 2 lần đọc là 100 ms.
• Trong khi bật lò, chớp nháy một LED với chu kỳ 1s để báo cho người dùng biết là
lò đang bật. Khi tắt lò thì LED thôi không chớp nháy.
Các hàm cho sẵn như sau:
• int readTemp(void) : trả về 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 sẽ
tự thực hiện hàm này ở câu c.a) Thiết kế máy trạng thái cho hệ thống trên (1.5đ)
Hướng dẫn:
Chia làm 2 máy trạng thái đồng bộ dùng biến chung (shared variable)
b) Time interval của hệ thống là bao nhiêu? (0.5đ)
c) Viết chương trình thực thi hệ thống trên 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
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 1 is running\n";
for( ;; )
{
vPrintString( pcTaskName );
vTaskDelay( 10 / portTICK_RATE_MS );
}
}
void vTask2( void *pvParameters )
{
const char *pcTaskName = "Task 2 is running\n";
for( ;; )
{
vPrintString( pcTaskName );
vTaskDelay( 10 / portTICK_RATE_MS );
}
}
void vTask3( void *pvParameters )
{
for( ;; )
{
toggleLED();
vTaskDelay( 250 / portTICK_RATE_MS );