1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình hệ thống nhúng - Bùi Quốc Bảo

34 19 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 201,89 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

BỘ 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 2

Tài liệu tham khảo

Trang 3

Khá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 4

Vi xử lý dùng trong môn học này

Trang 5

Lý 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 9

Key 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 10

Dấ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 11

Dấu phẩy (Commas)

 short add(short x, short y) ;

Dấu nháy (Apostrophes)

 mych='a' ;

Trang 12

Dấ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 13

Dấu ngoặc vuông (Brackets )

Dấu ngoặc tròn (Parentheses )

Trang 14

Biế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 15

Từ 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 16

 extern 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 17

Con 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 18

Phé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 19

Mả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 20

Kiể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 21

 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

 };

 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 22

Truy 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 23

Khở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 24

Function (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 25

Mô 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 26

Mô tả hàm

extern void InitSCI(void);

extern char InChar(void);

extern void OutChar(char character);

Trang 27

Truyề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 28

Truyề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 29

Con trỏ hàm (function pointer)

Trang 30

Con 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 31

Truyền tham số cho hàm callback

 typedef struct _myst

Trang 33

Chỉ dẫn tiền biên dịch

(Preprocessor Directives )

 #define Debug

#define LCD *(unsigned char *)0x2000

 void LCD_write(char data)

Trang 34

Chỉ dẫn tiền biên dịch

(Preprocessor Directives )

 #include "Filename"

 #include <Filename>

Ngày đăng: 08/05/2021, 19:17

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w