NG DNG HÀM NGT TRONG LP TRÌNH
CHO H X LÝ NHÚNG
TS. NGUYN THANH HI
B môn K thut đin t vin thông
Khoa Đin – Đin t
Trường Đại hc Giao thông Vn ti
Tóm tt: H x lý nhúng được s dng trong hu hết các thiết b đin – đin t, vic lp
trình cho h này có nhng đặc trưng khác vi lp trình cho PC thông thường. Trong bài báo
này xây dng và phân tích cu trúc ca mt chương trình cho h nhúng trên cơ s ng dng
hàm ngt.
Summary: Every year, millions of microprocessors and microcontroller chips are sold
as CPUs for electronic devices (embedded systems), programming for this system differs for
common PCs. The paper analizes some structured of programs for embedded system using
interrupt function.
I. YÊU CU CƠ BN ĐỐI VI H X LÝ NHÚNG
Mt h thng thông thường th hin mi quan h gia các đầu vào biết trước và đầu ra
cn đáp ng. Vi h thng điu khin s các đầu vào là các tín hiu mang d liu s hoc d
liu t đầu đo, còn đầu ra là d liu hin th hoc các tín hiu điu khin như hình dưới đây:
ĐT
Hin th
D liu vào
H X
NHÚNG
Sensor1
Sensor2
Sensor n Điu khin n
Điu khin 2
Điu khin 1
Xét v yếu t đáp ng yếu t thi gian thc, h x lý nhúng được xây dng trên cơ s x
các s kin. Mi mt s kin là mt bài toán mà h thng này cn phi gii quyết, thi gian tính
t thi đim có mt tác động ca s kin đầu vào đến thi đim đưa ra đầu ra là thi gian đáp
ng ca h thng. H thng thi gian thc là h thng luôn đảm bo thi gian đáp ng đúng
theo yêu cu ca bài toán, tc là các giá tr điu khin và hin th được đưa ra kp thi đúng theo
chu trình. Tính cht thi gian thc là đặc đim khác cơ bn gia h thng điu khin s và h
thng x lý thông thường.
Khi thiết kế và chế to mt thiết b s dng h x lý nhúng cn phi xét đến các yếu t sau:
- S cng vào ra cn thiết, s cng này bao gm cng vào ra s (Digital) và cng vào ra
tương t (Analog).
- Các module ghép ni vi thiết b ngoi vi, được chia thành các loi sau:
+ Module phc v chuyn đổi tín hiu gm b biến đổi ADC, DAC, khi điu chế độ
rng xung PWM.
+ Module truyn thông theo chun UART, SPI, I2C…
- Dung lượng RAM đỏi hi, ph thuc vào tng bài toán c th mà ta có th la chn RAM
cho phù hp. B nh bên trong có th t 256 byte đến vài KB, b nh ngoài t vài chc KB đến
vài MB.
- Dung lượng FLASH hoc ROM: Đây là nơi lưu gi mã chương trình.
- S lượng đòi hi ngt làm vic theo s kin.
- Tc độ vi x lý, đảm bo thi gian x lý ngt và thc hin hàm theo vòng lp chính.
- Thi gian đáp ng cn thiết, đáp ng kh năng thc hin theo h thng thi gian thc.
- Các yêu cu v ngun cp và năng lượng tiêu th.
- H phát trin phc v lp trình và g ri.
ĐT
- Chi phí chế to bao gm chi phí phn cng, chi phí cho h phát trin, chi phí lp trình và
hoàn thin h thng.
II. CU TRÚC CHUNG MT CHƯƠNG TRÌNH
1. Vòng lp chính
Chương trình ca mt h thng nhúng, trong trường hp không s dng h điu hành, có
cu trúc như sau:
void Event_1()
{
Command_1(); Delay5s(); // Hàm đợi 5s
Command_2();
}
int main (void)
{
Init_Parameter(); // Hàm khi to biến
while (1)
{
Read_Input(); // Hàm đọc các giá tr cng vào
Event_1(); // Hàm x lý s kin 1
Event_2(); // Hàm x lý s kin 2
……
Event_n(); // Hàm x lý s kin n
Write_Output(); // Hàm điu khin các cng ra
}
}
Trong đó hàm khi to có nhim v np các giá tr ban đầu cho biến, khi to các khi
phn cng như Timer, Counter, ADC, UART … làm vic theo yêu cu ca tng bài toán.
Hàm Read_Input cho phép xác định trng thái hoc giá tr ca các cng đầu vào vi x lý,
giá tr này có th là mc logic (cng vào Digital) hoc mt con s tương ng vi mc đin áp
vào (cng vào Analog).
Hàm Write_Output điu khin các cng ra, cũng có th là mc logic hoc giá tr đin áp ra
(quan b biến đổi DAC, PWM).
Các hàm Event_1() đến Event_n() x lý theo các s kin, đây là các hàm thc hin thut
toán ca chương trình.
Do đặc tính ca lnh While(1), ta thy sau khi thc hin xong hàm Write_Ouput() chương
trình s thc hin li hàm Read_Input(). Thi gian t hàm Read_Input() đến Write_Ouput() là
chu k quét chính ca chương trình và vòng lp while(1) được gi là vòng lp chính (Super
Loop).
ĐT
Phương pháp xây dng chương trình trên vòng lp chính là phương pháp ph biến nht khi
lp trình vi h nhúng.
2. Thi gian đáp ng các s kin
Theo cu trúc như trên ta thy mt vn đề là vic x lý các s kin theo nguyên tc tun t,
các s kin sau phi ch s kin phía trước x lý xong. Trong nhiu trường hp thi gian x
các s kin cui s quá ln và không đáp ng được yêu cu bài toán.
Thông thường vi nhiu s kin đòi hi cn hàm tr để đợi giá tr tác động đầu vào hoc
ch đến chu trình hot động tiếp theo, lúc này CPU ch thc hin vòng đợi thi gian trong khi
cn x lý s kin tiếp theo. Như vy ta không li dng được hiu năng ca CPU vi vai trò thc
hin thun toán, để khc phc hin tượng này có th dùng gii pháp sau: thiết lp trng thái đợi
vào mt c nh, tương ng vi trng thái này vi mi vòng quét ta kim tra đã hết thi gian đợi
chưa. Nếu hết thi gian s xóa c nh và tiếp tc thc hin trng thái tiếp theo ca s kin đợi,
trong trường hp chưa hết thi gian đợi ta có th thc hin hàm x lý s kin tiếp theo.
Tương ng vi vòng quét chính trên ta thay thế hàm Event_1() như sau:
void Event_1()
{
switch (trang_thai)
{
case 0:
Command_1(); trang_thai=1;
break;
case 1:
if(Het_5s) //Kim tra đã đủ 5 s
{
Command_2(); trang_thai=0;
}
}
Khi các s kin làm vic ph thuc vào các yếu t bên ngoài như các khi cng Timer,
ADC, PWM hay xung tác động t ngoài vi x lý thì chương trình phi đáp ng các s kin này
thông qua hai phương pháp: hoc là thc hin vòng lp để kim tra c trng thái s kin hoc
chc năng điu khin ngt. Thc hin chc năng điu kin ngt có li thế là kh năng đám ng
tc thi và cu trúc ca chương trình mch lc, d kim sot.
Khi có mt đòi hi ngt t các khi này, chương trình thc hin vòng quét chính s tm
ngng và thc hin hàm ngt trong vùng nh vector ngt tương ng. Sau khi hàm ngt thc
hin xong chương trình s t động tr v v trí trong vòng quét chính lúc gi hàm ngt.
Vi mt h x lý nhúng luôn luôn s dng chc năng ngt để đảm bo yếu t thi gian
thc.
3. H điu hành thi gian thc (RTOS)
ĐT
Cùng vi s phát trin mnh m ca h x lý nhúng, đòi hi phát trin mt h điu hành
chuyên dng cho các ng dng điu hành thi gian thc (RTOS – RealTime Operating System).
H điu hành thi gian thc cho phép lp trình các ng dng có đáp ng thi gian thc đơn gin
và d dàng, nó làm vic dưa trên s phân chia gia các chui s kin. Cu trúc ca lõi ca h
điu hành này như sau:
Trong sơ đồ cu trúc ca h điu hành thi gian thc (RTOS) điu khin đóng vai trò
đặc bit quan trng vi vai trò đồng b và phân b thi gian thc hin ca các Th tiến trình
(Task). Khi s dng h điu hành, ta có th s dng các hàm chun điu hành và cơ chế s dng
vòng quét chính không tn ti. Nguyên tc làm vic ca các Th tiến trình theo trng thái sau:
Hot động
Khóa Sn sàng
- Trng thái hot động: Vi x lý thc hin các thut toán phc v cho Th tiến trình này,
ti mt thi đim vi vi xđơn ch cho phép thc hin mt Th tiến trình.
- Trng thái sn sàng: Vi xđang thc hin mt tiến trình khác, tuy nhiên Th tiến trình
này sn sàng hot động khi kết thúc tiến trình trước đó.
- Trng thái khóa: Th tiến trình không thc hin nhim v gì ti thi đim hin ti, nó
trng thái ch mt s kin bên ngoài tác động vào để kích hot.
III. XÂY DNG HÀM NGT
Để xây dng mt hàm ngt trước tiên cn khi to các thanh ghi cu hình cho ngt đó làm
vic. Thông s ca các thanh ghi này ph thuc vào tng loi vi x lý, cu trúc ca khi phn
cng đòi hi ngt, các thông s này bao gm: la chn chế độ làm vic, các tham s ban đầu,
mc độ ưu tiên ngt và cho phép đòi hi ngt làm vic. Ví d đối vi khi biến đổi ADC ta cn
khai báo để thc hin yêu cu sau: tc độ biến đổi 10 chuyn đổi/giây, dng d liu 12bit, biến
đổi liên tc và cho phép thc hin hàm ngt.
ĐT
Bước tiếp theo là xác định chính xác địa ch tuyt đối ca hàm ngt trong bng Vector ngt
đã được quy định sn. Khi có mt đòi hi ngt đến vi x lý, con tr chương trình s ch đến địa
ch trong bng Vector ngt và ti địa ch này s có lnh gi hàm ngt tương ng. Ví d hàm ngt
b ADC nm địa ch OCB03.
Cui cùng ta cn xây dng hàm ngt để x lý s kin mà ngt đòi hi, vi d đối vi b
biến đổi ADC hàm ngt s được gi sau khi thc hin phép biến đổi xong. Trong hàm này cn
thc hin các nhim v sau:
- Chuyn d liu va biến đổi xong trong thanh ghi d liu 16 bit vào biến trung gian.
- Xóa các c bên trong khi biến đổi
- Ra lnh thc hin chuyn đổi tiếp theo
IV. NG DNG HÀM NGT TRONG CH TO THIT B GIÁM SÁT HÀNH TRÌNH
VÀ TC ĐỘ CHO PHƯƠNG TIN VN TI
1. Xác định các s kin đòi hi ngt
Để giám sát tc độ và hành trình phương tin vn ti, thiết b chế to cn thc hin các