Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao....
Trang 1BỘ MÔN KỸ THUẬT ðIỆN TỬ-ðH BK TP.HCM
BÙI QUỐC BẢO
LẬP TRÌNH HỆ THỐNG
NHÚNG
Mục tiêu môn học
Tự mình thiết kế phần mềm cho một hệ thống
nhúng dùng 1 hay nhiều CPU dựa trên vi ñiều
khiển (8051, ARM) dựa trên một phần cứng có
sẵn.
Phần mềm ñược thiết kế có cấu trúc, dựa trên
ngôn ngữ cấp cao (C) hoặc sử dụng cả hợp
ngữ và C.
Nắm ñược lý thuyết cơ bản về hệ ñiều hành
nhúng; sử dụng ñược các hệ ñiều hành nhúng
Trang 2Tài liệu tham khảo
Trang 3Khái niệm về hệ thống nhúng
cứng máy tính và phần mềm, ñược thiết
kế ñể thực hiện một chức năng chuyên
Tùy thuộc vào ứng dụng và giá thành, người
thiết kế quyết ñịnh loại vi xử lý dùng trong hệ
Trang 4Vi xử lý dùng trong môn học này
Trang 5Lý do sử dụng ngôn ngữ C
C cho phép lập trình có cấu trúc.
Ngôn ngữ C cho phép dễ dàng truy cập ñến
cấu trúc phần cứng (ví dụ thông qua con trỏ)
kích thước nhỏ nhất và chạy với tốc ñộ
nhanh nhất
cầu nghiêm ngặt về thời gian
Trang 6<= less than or equal to
>= greater than or equal to
Trang 7<<= shift value left
>>= shift value right
Trang 8#define LCD *(unsigned char volatile *)(0x1003)
Key word (Từ khóa)
asm Insert assembly code
auto Specifies a variable as automatic (created
on the stack)
break Causes the program control structure to finish
case One possibility within a switch statement
char 8 bit integer
const Defines parameter as constant in ROM
continue Causes the program to go to beginning of loop
default Used in switch statement for all other cases
do Used for creating program loops
double Specifies variable as double precision floating point
else Alternative part of a conditional
extern Defined in another module
float Specifies variable as single precision floating point
Trang 9Key word (Từ khóa)
location
register store the variable onto the CPU register if
space on the register is available
return Leave function
short 16 bit integer
Key word (Từ khóa)
signed Specifies variable as signed (default)
sizeof Built-in function returns the size of an
object
static Stored permanently in memory, accessed
locally
struct Used for creating data structures
switch Complex conditional control structure
typedef Used to create new data types
unsigned Always greater than or equal to zero
void Used in parameter list to mean no parameter
volatile Can change implicitly
while Used for creating program loops
Trang 10Dấu chấm phẩy (semicolons)
unsigned char LastData;
Start: Cnt=0; /* number of times Port C is the same */
LastData=PORTC;
Loop: if(++Cnt==100) goto Done;
/* same thing 100 times */
if(LastData!=PORTC) goto Start;/* changed */
goto Loop;
Done: return(LastData);
}
Trang 11Dấu phẩy (Commas)
short add(short x, short y) ;
Dấu nháy (Apostrophes)
mych='a' ;
Trang 12Dấu nháy kép (Quotation marks )
unsigned char Name[] = “embedded";
Dấu ngoặc nhọn (braces)
Dùng ñể bắt ñầu và kết thúc một khối câu lệnh
Trang 13Dấu ngoặc vuông (Brackets )
Dấu ngoặc tròn (Parentheses )
Trang 14Biến tĩnh (Static)
giữ trong suốt quá trình chương trình
chạy, nhưng chỉ truy cập ñược bên trong
chương trình mà nó ñược ñịnh nghĩa
Trang 15Từ khĩa volatile
cĩ thể thay đổi khơng đốn trước được
Các ngoại vi được thiết kế theo kiểu
Trang 16extern char LCD_value;
Biến ñược khởi tạo trước
6, 5};
char Name[4] = "Jon";
char Name[6] = "Jon";
char Name[] = "Jon";
char *NamePt = "Jon";
Trang 17Con trỏ (pointer)
Khai báo biến a: int a;
ðịa chỉ của biến a: &a có phải là con trỏ hay
Trang 18Phép toán với con trỏ
Con trỏ luôn chỉ vào ñịa chỉ ñầu của một ñối
tượng (object) Cộng 1 vào con trỏ làm nó
chỉ ñến ñối tượng tiếp theo.
Khi so sánh 2 con trỏ, giá trị chúng ñang
mang ñược coi như số không dấu
0x2000 0x2001
0x2002 0x2003
0x00 p
k
Trang 19Mảng và chuỗi (array and string)
Mảng là tập hợp các biến giống nhau có cùng
Mảng và chuỗi (array and string)
Trang 20Kiểu cấu trúc (structure)
Một structure là tập hợp của nhiều biến Các
biến trong struct có thể khác kiểu nhau.
struct theport
{
int mode; // 0 for I/O, 1 for in only -1 for out only
unsigned char volatile *addr; // pointer to its address
unsigned char volatile *ddr; // pointer to its direction reg
int mode ; // 0 for I/O, 1 for in only -1 for out only
unsigned char volatile *addr ; // pointer to its address
Trang 21struct theport
{
int mode; // 0 for I/O, 1 for in only -1 for out only
unsigned char volatile *addr; // pointer to its address
unsigned char volatile *ddr; // pointer to its direction
reg
};
typedef struct theport port;
port PortA, PortB, PortC;
Struct
typedef struct
{
int mode ; // 0 for I/O, 1 for in only -1 for out only
unsigned char volatile *addr ; // pointer to its address
unsigned char volatile *ddr ; // pointer to its direction
//reg
} port;
port PortA, PortB, PortC;
Trang 22Truy cập phần tử con của struct
PortC.addr=(unsigned char volatile *)(0x1003);
PortC.ddr=(unsigned char volatile *)(0x1007);
p->mode=0; (dùng dấu -> ñể truy cập phần
tử con của 1 con trỏ kiểu struct)
Trang 23Khởi tạo struct
(unsigned char volatile *)(0x100A),
(unsigned char volatile *)(0)};
Struct and union
I uint32_t RESERVE0:2;
IO uint32_t CFGUEN:1;
IO uint32_t LDUEN:1;
IO uint32_t ISPFF:1;
IO uint32_t SWRST:1;
IO uint32_t PT:3;
I uint32_t RESERVE1:1;
IO uint32_t ET:3;
I uint32_t RESERVE2:17;
#define AHB_BASE (( uint32_t)0x50000000)
#define FMC_BASE (AHB_BASE +0x0C000)
#define FMC ((FMC_T *)FMC_BASE)
FMC->ISPCON.ISPEN = 1 FMC->ISPADR = 0x20000000;
Trang 24Function (Hàm, chương trình con)
thành nhiều khối (module)
(input), xử lý và xuất ra kết quả (output)
Trang 25Mô tả hàm (function declaration)
Mô tả hàm cho ta biết tên hàm, kiểu của các
tham số và kiểu kết quả trả về.
void Ritual(void); // none none
char InChar(void); // none 8-bit
void OutChar(char letter); // 8-bit none
short InSDec(void); // none 16-bit
void OutSDec(short i); // 16-bit none
char Max(char in1,char in2); // two 8-bit 8-bit
int EMax(int in1,int in2); // two 16-bit 16-bit
void OutString(char* mystring); // pointer to 8-bit none
char *alloc(int size); // 16-bit pointer to
8-bit int Exec(void(*fnctPt)(void)); // function pointer 16-bit
ðịnh nghĩa hàm (function definition)
Trang 26Mô tả hàm
extern void InitSCI(void);
extern char InChar(void);
extern void OutChar(char character);
Trang 27Truyền tham số (Arguments
passing)
chương trình con:
Truyền tham chiếu (call by reference)
Truyền giá trị (call by value)
Truyền tham chiếu (call by
reference)
Tham chiếu (con trỏ) ñến tham số ñược ñưa
vào chương trình con.
Các tính toán trong chương trình con sẽ ảnh
hưởng ñến biến ñược ñược truyền vào.
int increment(int *num)
Trang 28Truyền giá trị (call by value)
Giá trị của biến sẽ ñược sao chép và truyền
vào chương trình con.
Các phép tính trên tham số trong chương trình
con không ảnh hưởng biến ban ñầu.
int increment(int num)
int mode; // 0 for I/O, 1 for in only -1 for out only
unsigned char volatile *addr; // pointer to its address
unsigned char volatile *ddr; // pointer to its direction reg
};
typedef struct theport port;
unsigned char Input(port thePort)
Trang 29Con trỏ hàm (function pointer)
Trang 30Con trỏ hàm là tham số của 1 hàm
khác
int fun1(int input){
return(input+1); // this adds 1
};
int fun2(int input){
return(input+2); // this adds 2
sự kiện xảy ra
MyButton
void create_button( int x, int y, const char *text, function callback_func );
MyButton
ButtonClickedEvent callback_func
Trang 31Truyền tham số cho hàm callback
typedef struct _myst
Trang 33Chỉ dẫn tiền biên dịch
(Preprocessor Directives )
#define Debug
#define LCD *(unsigned char *)0x2000
void LCD_write(char data)
Trang 34Chỉ dẫn tiền biên dịch
(Preprocessor Directives )
#include "Filename"
#include <Filename>