Hỏi về tham số truyền vào hàm

Em học lập trình nhúng bên ARM! trên board STM32F4 thì em thấy 1 điều rất là hay. Hàm HAL_GPIO_TogglePin(), … với tham số thứ 2 có thể có nhiều chân. Em đang muốn làm sau ứng dụng nó vào code C của mình luôn. Giống như hàm int main(int argc, char ** argv); thì mình có khả năng kiểm tra số lượng tham số của người dùng thêm vào khi gọi chương trình. Nhưng em không biết làm sau mong anh chị giúp đỡ.
VD:
HAL_GPIO_TogglePin(GPIOD, GPIO_Pin_12);
HAL_GPIO_TogglePin(GPIOD, GPIO_Pin_12|GPIO_Pin_13);
HAL_GPIO_TogglePin(GPIOD, GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
làm sao xác định số lượng phần tử truyền vào tham số 2 của hàm.

Thực chất đây là ví dụ của bitmask.

2 Likes

Anh có thể giải thích đc không anh! Em có đọc thì thấy chân GPIO_Pin_12 = 000…01(định nghĩa). Em cũng không hiểu rỏ nữa!

Câu hỏi của bạn cho hàm đó là chưa chính xác, thật chất HAL_GPIO_TogglePin() chỉ nhận vào 2 đối số
HAL_GPIO_TogglePin(Port, Pin);
Với Port = GPIOD
và Pin = GPIO_Pin_12
hoặc là Pin = GPIO_Pin_12 | GPIO_Pin_13

Người ta sẽ định nghĩa như vầy
GPIO_Pin_12 = 0001
GPIO_Pin_13 = 0010

Khi đó
Pin = GPIO_Pin_12 = 0001;
Hoặc
Pin = GPIO_Pin_12 | GPIO_Pin_13 = 0001 | 0010 = 0011;
Từ đó dựa vào 0001, 0011 người ta sẽ làm gì đó trong hàm HAL_GPIO_TogglePin()

2 Likes

Cảm ơn bạn! Hèn chi họ dùng ‘|’ mà mình không để ý là phép OR. Cảm ơn bạn nhiều.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?