You are on page 1of 4

Khoa Điện-Điện Tử ĐỀ THI HỌC KỲ 2 – 2014/2015

Bộ Môn Điện Tử 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 máy vi tính

Câu 1: (3đ)

a) Giải thích sự khác nhau giữa hàm add và addptr


intadd(inta)
{

om
a=a+1;
returna;
}

.c
intaddptr(int*a)
{

ng
*a=*a+1;
return*a;
co
}
voidmain(void)
{
an

intsum,init;
init=0;
th

sum=add(init);//ham add: sẽ gửi giá trị trị của init


vào hàm add() và sau khi tính toán giá trị đc trả vào
ng

sum, giá trị của init không đổi


sum=addptr(&init);//hàm addptr(): gửi địa chỉ của init
o

vào hàm addptr() và thực hiện trên chính biến init giá
du

trị trả về đc trả vào sum


}
u

b) Tính giá trị của các biến sum và init sau khi thực hiện mỗi lệnh command 1 và
cu

command 2.
Tại command1: init = 0; sum =1;
Tại command2: init = 1, sum = 1;
c) Một trong số các lệnh sau gọi một hàm ở địa chỉ 0x3000. Đó là lệnh nào?

((void ()(void))0x3000)(*); Câu này


((void (*)(void))0x3000)();
((void ()(void))0x3000)();
((void (*)(void))0x3000)(*);

CuuDuongThanCong.com https://fb.com/tailieudientucntt
Câu 2:(3đ)

Một bộ báo cháy được thiết kế như sau:

Đầu vào là 1 cảm biến khói S. Cảm biến này ở mức 1 nếu phát hiện khói, nếu
không sẽ ở mức 0
Ngõ ra là 1 relay.

Hệ thống hoạt động như sau:

1. Hệ thống sẽ đọc cảm biến S sau mỗi 10 ms. Nếu cảm biến S bằng 1 sau 2 lần đọc
liên tiếp, hệ thống cho là có cháy. Nếu cảm biến M bằng 0 sau 2 lần đọc liên tiếp,
hệ thống cho là không có cháy.
2. Khi hệ thống phát hiện cháy, hệ thống bật relay.

om
3. Khi hệ thống không còn phát hiện cháy, ngõ ra relay vẫn tiếp tục bật trong 10s rồi
mới tắt.

.c
4. Nếu trong thời gian 10s này mà tiếp tục phát hiện cháy, quá trình trở lại bước 2.

ng
Các hàm cho sẵn như sau: co
int readS(void): trả về giá trị cảm biến S
an

void onRelay(void) : Điều khiển bật relay


void offRelay(void) : Điều khiển tắt relay
th

void initSysTick(unsigned int number_ms) : khởi động ngắt


ng

systemTick với chu kỳ number_ms milisecond


void SystickISR(void) : chương trình phục vụ ngắt systemTick. Sinh viên sẽ
o

tự thực hiện hàm này ở câu c cùng với hàm main và các hàm cần thiết khác.
du

a) Thiết kế máy trạng thái cho hệ thống trên (1.5đ)


u
cu

Hướng dẫn:

Chia làm 2 máy trạng thái đồng bộ dùng biến chung (shared variable). Một máy
trạng thái phát hiện cháy và 1 máy trạng thái điều khiển relay.

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ế. (1đ)

CuuDuongThanCong.com https://fb.com/tailieudientucntt
om
Câu 3:(2 đ)
Các lệnh sau đây có thể làm cho tác vụ bị block hay không? Giải thích.

.c
a) portBASE_TYPExQueueSend(xQueueHandlexQueue,
constvoid*pvItemToQueue,portTickTypexTicksToWait);

ng
có thể bị block, vì khi queue đầy thì không thể gửi
data và queue nên task se bị tràn cho đến khi hết thơi gian
co
xTicktoWait( hoặc queue rỗng trong lúc task bị blocked.)

b) portBASE_TYPExQueueReceive(xQueueHandlexQueue,
an

void*pvBuffer,portTickTypexTicksToWait);
âcó thể bị blocked vì nến trong queue không có data thì task
th

sẽ đi vào trạng thái block cho đến hết thời gian xTickToWait
ng

c) portBASE_TYPExQueueSendFromISR(xQueueHandlepxQueue,
constvoid*pvItemToQueue,
o

portBASE_TYPE*pxHigherPriorityTaskWoken);
du

hàm này không làm task bị blocked vì hàm này chỉ dc gọi
trong ngắt mà ngắt không phải 1 task.
u

d) portBASE_TYPExQueueReceiveFromISR(xQueueHandlepxQueue,
cu

void*pvBuffer,portBASE_TYPE*pxTaskWoken);hàm này cũng không


làm tác vụ bị blocked.

e) portBASE_TYPExQueuePeek(xQueueHandlexQueue,void*pvBuffer,po
rtTickTypexTicksToWait);
giống như xQueueReceive nhưng khi đọc data ra thì data vẫn
còn trong queue

Câu 4:(2 đ)

Giả sử có 3 tác vụ T1, T2, T3. T1 có mức ưu tiên 2, T2 và T3 có mức ưu tiên 1


a) Giả sử không có tác vụ nào sử dụng các câu lệnh làm cho nó bị block. Các tác vụ
nào sẽ được chạy?khi đó đó tác vụ T1 chạy vì nó có mức ưu tiên cao nhất

CuuDuongThanCong.com https://fb.com/tailieudientucntt
b) Tác vụ idle có được chạy trong trường hợp này? Idle task không đc chạy vì T1 đã
giành hết thời gian của CPU.
c) Tác vụ T1 cố gắng đọc một queue đang bị rỗng, với thời gian block được đặt là
portMax_Delay. Các tác vụ sẽ chạy như thế nào?. Khi đó task1 sẽ bị blocked và
task2 hoặc task3 sẽ chạy cho đến khi trong queue có dữ liệu thì task 1 sẽ chuyển từ
trạng thái blocked sang running.

Bộ môn Điện Tử CB ra đề

om
.c
ng
co
an
th
o ng
du
u
cu

CuuDuongThanCong.com https://fb.com/tailieudientucntt

You might also like