🌱 Embedded C - Các câu lệnh điều khiển luồng chương trình - Flow Control Statements
Trong lập trình nói chung và lập trình C nhúng nói riêng, các câu lệnh điều khiển luồng chương trình (Flow Control Statements) được sử dụng để điều khiển thứ tự thực thi các lệnh trong chương trình, cho phép thực hiện các quyết định logic, lặp lại các tác vụ, hoặc nhảy đến các phần mã khác. Đây là một phần rất cơ bản của lập trình và cần hiểu rõ để có thể sử dụng linh hoạt.
Trong C, chúng ta có thể chia các câu lệnh flow control thành 3 loại: Conditional Statements (if, switch), Iteration Statments (for, while, do-while), Jump Statements (break, continue, goto, return).
Mục Lục
- Câu lệnh vòng lặp - Iteration Statements
- Câu lệnh nhảy - Jump Statements
- Kết Luận
Câu lệnh điều kiện - Conditional Statements
Conditional Statements - câu lệnh điều kiện, là các câu lệnh với mục đích kiểm tra điều kiện và quyết định chương trình sẽ tiếp tục thực thi đoạn code nào?
C hỗ trợ 2 câu lệnh điều kiện là if và switch với các đặc điểm khác nhau. Câu lệnh if sử dụng để kiểm tra một điều kiện trả về là True hay False, trong khi đó switch dùng để kiểm tra giá trị của một biến/biểu thức.
- Câu lệnh if thường sử dụng để kiểm tra điều kiện trả về True/False, nên thường sử dụng để kiểm tra các điều kiện phức tạp, tham số đầu vào trong hàm, ...
- Trong khi đó switch thường sử dụng để kiểm tra các biến/biểu thức có thể trả về nhiều giá trị khác nhau, và được dùng rất nhiều trong Embedded để kiểm tra các biến trạng thái, và thiết kế các State Machine.
Về cú pháp và ví dụ sử dụng mình mô tả trong video này:
Câu lệnh vòng lặp - Iteration Statements
Iteration Statements - Câu lệnh vòng lặp, là các câu lệnh để thực hiện lặp lại cùng một đoạn code nhiều lần. Các lập trình viên Embedded đã quá quen thuộc với vòng while(1) - nhằm giúp chương trình cho các thiết bị luôn chạy cho đến khi bị tắt nguồn.
C hỗ trợ 3 câu lệnh vòng lặp: for, while, do-while.
for loop
for (initialization; condition; update) {
// Block of code executed in each loop
}
Vòng lặp for thường tạo ra một biến đếm với giá trị khởi tạo (initialization) và một điều kiện để kết thúc vòng lặp (condition). Về cú pháp và ví dụ mình đã nói đến trong video này:
while/do-while loop
while (condition) {
// Block of code to execute if condition is true
}
do {
// Block of code executed at least once
} while (condition);
Khác với for thì hai vòng lặp while và do-while không sử dụng biến đếm, chúng sẽ liên tục kiểm tra xem điều kiện lặp còn đúng hay không, và thoát khi điều kiện đó sai. Vì vậy while và do-while thường sử dụng cho các vòng lặp mà dev không biết trước số lần lặp.
Ví dụ như việc đợi một sự kiện từ người dùng (giả sử đợi người dùng bấm nút), hoặc đợi một sự kiện phần cứng (đợi một cờ set lên 1), hoặc chính vòng lặp while(1).
Câu lệnh nhảy - Jump Statements
Jump Statements - các câu lệnh nhảy thường được sử dụng để điều hướng chương trình theo những cách "bất ngờ" hơn:
- break: Thoát ngay lập tức khỏi vòng lặp hoặc switch-case chứa nó.
Ví dụ: Chương trình tính tổng các số (tối đa 10 số), nếu người dùng nhập số âm, vòng lặp sẽ kết thúc.
- #include <stdio.h>
- int main() {
- int i;
- double number, sum = 0.0;
- for (i = 1; i <= 10; ++i) {
- printf("Enter n%d: ", i);
- scanf("%lf", &number);
- // if the user enters a negative number, break the loop
- if (number < 0.0) {
- break;
- }
- sum += number; // sum = sum + number;
- }
- printf("Sum = %.2lf", sum);
- return 0;
- }
- continue: Bỏ qua phần còn lại của vòng lặp hiện tại và chuyển đến vòng lặp tiếp theo.
Ví dụ: Chương trình tính tổng các số (tối đa 10 số), nếu người dùng nhập số âm, số đó sẽ không được cộng vào kết quả.
- goto: Nhảy trực tiếp đến một nhãn (label) trong cùng hàm.
goto thường được sử dụng với các hàm phức tạp (nhiều nhánh) để xử lý lỗi khi cần, ít được sử dụng trong các hoàn cảnh khác do việc kiểm soát chương trình sẽ khá phức tạp.
Ví dụ: Xử lý lỗi khẩn cấp
- return: Thoát khỏi hàm hiện tại và trả về giá trị (nếu có).
➥ Sẽ được nhắc đến trong bài viết về Function.
Kết Luận
Các câu lệnh điều khiển luồng (if, switch, for, while, do-while, break, continue, goto, return) trong Embedded C là công cụ thiết yếu để điều khiển luồng thực thi, đáp ứng yêu cầu thời gian thực và quản lý tài nguyên hạn chế.
Chúng cho phép xử lý logic phức tạp, từ kiểm tra cảm biến, điều khiển thiết bị, đến quản lý lỗi. Trong hệ thống nhúng, cần tối ưu hóa hiệu suất, đảm bảo an toàn, và tránh các cấu trúc như goto để mã dễ bảo trì.
Hiểu rõ và sử dụng hợp lý các câu lệnh này giúp xây dựng các ứng dụng nhúng hiệu quả và đáng tin cậy.
>>>>>> Follow ngay <<<<<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊