b Viết chương trình thực hiện 3 tác vụ trên với timing đã đặt ra và SystickTimer như câu a.. Chỉ viết chương trình phục vụ ngắt Systick và vòng lặp chính, đồng thời khai báo các biến toà
Trang 1ĐỀ THI CUỐI KỲ - HK2 NĂM HỌC 2016/2017
MÔN THI: LẬP TRÌNH NHÚNG
TG: 90 PHÚT
(SV không làm bài trên đề thi)
Câu 1) (2 đ)
Viết hàm revbits nhận vào 1 tham số kiểu char và trả về kết quả kiểu char có giá trị là đảo vị trí các bit của tham số
Giải thích: Tham số có giá trị nhị phân là b7 b6 b5 b4 b3 b2 b1 b0 thì kết quả là b0 b1 b2 b3 b4 b5 b6 b7
Hướng dẫn: Sử dụng các phép toán dịch bit, AND, OR
Câu 2) (2đ)
a) Viết hàm void initPortA(void) khởi động PORTA với PA3 0 là input, PA7 4 là output sử dụng thư viện TIVAware b) Viết hàm void updateOutput(void) xuất giá trị đảo của PA3 0 ra PA7 4.
Ví dụ PA3 0 là 1100 thì PA7 4 sẽ là 0011
Câu 3) (2đ)
Cho 3 hàm void Task1(void), void Task2(void), void Task3(void) Ba hàm này có timing như sau:
Task 1 chạy sau mỗi 40 ms Task 2 chạy sau mỗi 50 ms Task 3 chạy sau mỗi 60 ms
a) Viết hàm void initSystick(void) khởi động Systick Timer với chu kỳ 1 ms
b) Viết chương trình thực hiện 3 tác vụ trên với timing đã đặt ra và SystickTimer như câu a (Chỉ viết chương trình phục
vụ ngắt Systick và vòng lặp chính, đồng thời khai báo các biến toàn cục cần thiết)
//Khai báo các biến cần thiết ở đây
void SystickISRHandler()
{
//write the code here
}
int main(void)
{
while(1)
{
//write the code here
}}
Trang 2Câu 4: (2đ)
Vi điều khiển ARM TIVA123C muốn truyền dữ liệu sử dụng mã hóa Manchester Một tín hiệu Clock được đưa vào chân
PA0, tín hiệu mã hóa xuất ra trên PA1 Mã hóa manchester được thực thi bằng cách: Clock XOR Data = Manchester Output
Viết hàm Manchester(unsigned char Data) để mã hóa và xuất dữ liệu mã hóa ra PA1, bit truyền đầu tiên là bit có trọng
số cao nhất
Để truyền 1 bit, quá trình như sau:
• Chờ cho clock lên 1
• Đưa giá trị Data XOR Clock ra PA1
• Chờ cho Clock xuống 0
• Đưa giá trị Data XOR CLock ra PA1
Lặp lại quá trình cho cả 8 bit để truyền byte Data đi
Chú ý: Coi như các chân port đã được khởi động Sử dụng các hàm của thư viện TivaWare để đọc/ghi port
Câu 5) (2đ)
Cho các khai báo sau của một chương trình dùng FreeRTOS
xQueueHandle myQueue // our queue
message_t MyMessage; // variable for a message (not a pointer!)
portBASE_TYPE Result; // result of the operation
portBASE_TYPE pxHigherPriorityTaskWoken ;
a) Viết lệnh khởi tạo myQueue có thể chứa 5 phần tử, mỗi phần tử có kiểu message_t
b) Viết lệnh ghi nội dung của biến MyMessage vào Myqueue trong một tác vụ (không phải trình phục vụ ngắt), thời gian chờ là 1000 lần ngắt Systick
c) Viết lệnh đọc một giá trị từ Myqueue vào biến MyMessage trong ISR
d) Trong 1 ISR ta gọi lệnh xSemaphoreGiveFromISR( xCountingSemaphore, &xHigherPriorityTaskWoken );
Khi nào biến xHigherPriorityTaskWoken mang giá trị TRUE?