You are on page 1of 5

Embedded C Advance.

Nội dung:
1. Các khái niệm cơ bản về C
 Tại sao lại sử dụng C trong embedded
 Chuẩn ANSI C là gì
 Lý thuyết cơ bản về C
2. Các kiểu dữ liệu trong C
 Kiểu dữ liệu nguyên thủy : int , char
 Kiểu dữ liệu người dùng tự định nghĩa : struct, typedef, union
 Kiểu liệt kê : enum
 Kiểu hằng số : const
 Kiểu dữ liệu con trỏ
 Kiểu tham chiếu
3. Tiền định nghĩa trong C/C++
 Tiền định nghĩa trong C là gì ?
 Ý nghĩa các từ khóa #define, #ifdef, #ifndef, #prama
 Các macro định nghĩa trong C
 Sử dụng toán tử trong tiền xử lý
4. Tổ chức bộ nhớ và các kiểu dữ liệu chương trình
 Cấu trúc vùng nhớ của máy tính , vi điều khiển (CPU/ RAM)
 Tổ chức bộ nhớ một chương trình : heap, stack , code, data, text, bss, …
 Biến toàn cục, biến địa phương, biến static trong chương trình
 Biến volatile, weak, extern, static, const, automic, register, …
 Memory aligment trong C
5. Hàm trong C
 Định nghĩa hàm trong C
Có nhiều cách để nói về khái niệm function khác nhau:
Định nghĩa : “Hàm là một đoạn lệnh có thể tái sử dụng. Hàm cho phép lập trình viên cấu trúc
chương trình thành những phân đoạn khác nhau để thực hiện những công việc khác nhau”

 Các phương pháp truyền tham số vào hàm : truyền tham số, tham trị , con trỏ
 Callback function
Sử dụng con trỏ hàm để làm callback function trong hàm
Khai báo
typedef void (*callback_function) (kiểu dữ liệu … )
Ứng dụng trong ngắt hoặc sử dụng gọi hàm trong event
 Inline function
 Con trỏ hàm
 Con trỏ hằng và hằng con trỏ trong C
- Con trỏ hằng :
Là con trỏ trỏ đến vùng dữ liệu hằng. Ta không thể thay đổi giá trị mà nó đang trỏ đến. Nhưng
có thể thực hiện tăng giảm địa chỉ con trỏ hay cho nó trỏ đi nơi khác.
Khai báo : const int *p
Ví dụ:
int x = 5;
int y = 10;
int *q;

cout << "x : " << &x << endl;


cout << "y : " << &y << endl;
cout << "-------------" << endl;

q = &y; // Con tro q tro


den dia chi y
cout << "q : " << q << endl; // Dia chi cua con tro q
cout << "&q : " << &q << endl; // Dia chi cua con tro q
cout << "*q : " << *q << endl; // Gia tri con tro q
cout << "-------------" << endl;
const int *p = &x; // Con tro hang tro den dia chi
x
cout << "p :" << p << endl; // Dia chi con tro p
cout << "&p : " << p << endl; // Dia cho con tro p
cout << "*p : " << *p << endl; // Gia tri con tro p
cout << "-------------" << endl;
p = &y; // OK : Thay doi dia chi
cua con tro hang
// *p = 6; // Error : Khong thay doi
duoc gia tri cua con tro tro den
cout << "&p : " << p << endl;
cout << "*p : " << *p << endl;
cout << " x : " << x << endl; // x = 6;
getchar();

- Hằng con trỏ


Là một con trỏ nếu trỏ vào một ô nhớ nào đó thì nó sẽ dính chặt vào ô nhớ đó. Ta không thể
cho nó trỏ đi chỗ khác và tăng giảm địa chỉ của con trỏ. Nhưng ta có thể thay đổi được giá trị
mà nó trỏ đến.

Khai báo : int * const p;


int x = 5;
int y = 10;
int *q; // Con tro q
cout << "x : " << &x << endl;
cout << "y : " << &y << endl;
cout << "-------------" << endl;

q = &y; // Con tro q tro den dia chi y


cout << "q : " << q << endl; // Dia chi cua con tro q
cout << "&q : " << &q << endl; // Dia chi cua con tro q
cout << "*q : " << *q << endl; // Gia tri con tro q
cout << "-------------" << endl;
int *const p = &x; // Con tro hang tro den dia chi x
cout << "p :" << p << endl; // Dia chi con tro p
cout << "&p : " << p << endl; // Dia cho con tro p
cout << "*p : " << *p << endl; // Gia tri con tro p
cout << "-------------" << endl;
// p = &q; // Error : Khong the thay doi dia chi
cua con tro hang
*p = 6; // OK : Thay doi duoc gia tri cua
con tro tro den
cout << "&p : " << p << endl;
cout << "*p : " << *p << endl;
cout << " x : " << x << endl; // x = 6;
getchar();

/*
x: 0086FAAC
y : 0086FAA0
------------ -
q : 0086FAA0
&q : 0086FA94
*q : 10
------------ -
p : 0086FAAC
&p : 0086FAAC
*p : 5
------------ -
&p : 0086FAAC
*p : 6
x : 6
*/

6. Mảng trong C
 Định nghĩa, khai báo và sử dụng mảng
 Mảng nhiều chiều và con trỏ
 Mảng ký tự và string
 Truyền mảng như là một tham số vào hàm
 Xử lý string sử dụng và không sử dụng các hàm của thư viện
7. Các kiểu dữ liệu tự định nghĩa
 Kiểu dữ liệu struct, khai báo và sử dụng
 Tổ chức vùng nhớ struct
 Struct data aligment
 Truy cập biến trong struct
 Nested structures, Array structure
 Truyền struct vào hàm như tham số
 Cấp phát động struct
 Structure bit operation
 So sánh struct với nhau
 Định nghĩa Union
 Overlapping member
 Định nghĩa Enum, Indexing , enum và #define
8. Các toán tử về bit
 AND, OR, XOR, ~, <<, >>
 Mask, setting, clearing và testing of bit/bits
 Thứ tự ưu tiên toán tử bit
9. Pointer (9.1 & 9.2)
 Định nghĩa con trỏ
 Khác biệt giữa con trỏ và tham chiếu
 Các toán tử với con trỏ
 Generic và null pointer
 Function pointer
 Array of pointers
 Pointer to struct and union
 Pointer to dynamic memory
 Far, near and huge pointer
 Pointer type casting
10. Cấp phát động
 Malloc(), calloc(), realloc(), free()
 Farmalloc(), Farcalloc()
11. Xử lý với file
 Lý thuyết kiểu dữ liệu file
 Inode, cấu trúc FILE, FILE pointer
 Access and handle FILE
12. Command line Argument
 Argc, argv
 Ví dụ về các biến đầu vào cho hàm main
13. Compiler and Debuger
 Định nghĩa compiler, assember, linker
 Kỹ thuật tối ưu code
 Bootloader , startup code trong vi điều khiển
 Makefile cơ bản
 Development Tools and Enviroment
 Object and Executable File Format
 Debuger
14. Cấu trúc dữ liệu
 Linear and non linear data struct
 Stack & Queue
 Binary tree
 Single, Double & Cicular Linked List (Ring buffer)
 Hash
15. Realtime Embedded System
 Hard Real Time and Soft Realtime
 Giới thiệu về hệ điều hành RTOS
 Porting RTOS và MDK RTX STM32
 Thread , task, hook function
 Race condition và cách khắc phục (Mutex, Semaphore, )
 Truyền dữ liệu giữa các thread (Message Queue, Mailbox, …)
 Memory pool
 Lowpower

You might also like