STM32
Assert macro
assert_param
là một macro được sử dụng trong các thư viện chuẩn của
STM32 để kiểm tra các điều kiện và tham số đầu vào trong các hàm.
Nó giúp đảm bảo rằng các tham số đầu vào hợp lệ, nếu không hợp lệ
thì nó sẽ kích hoạt một xử lý lỗi.
Dưới đây là cách sử dụng assert_param trong chương trình STM32:
1. Cấu hình USE_FULL_ASSERT
Trước khi sử dụng assert_param
, bạn cần chắc chắn rằng USE_FULL_ASSERT
được định nghĩa trong dự án của bạn. Điều này thường được cấu hình trong
tệp tiêu đề stm32fxx_hal_conf.h
(thay thế xx bằng dòng vi điều khiển của bạn,
ví dụ: stm32f4xx_hal_conf.h).
Mở tệp stm32fxx_hal_conf.h và đảm bảo rằng dòng #define USE_FULL_ASSERT không bị chú thích:
#define USE_FULL_ASSERT
2. Khai báo hàm assert_failed
Bạn cũng cần cung cấp định nghĩa của hàm assert_failed
. Hàm
này sẽ được gọi khi assert_param
phát hiện ra một lỗi. Thêm
định nghĩa này vào tệp mã nguồn chính của bạn:
void assert_failed(uint8_t *file, uint32_t line)
{
/* User can add his own implementation to report the HAL error return state */
printf("Wrong parameters value: file %s on line %d\r\n", file, line);
// Infinite loop
while(1)
{
}
}
3. Sử dụng assert_param
assert_param
được sử dụng để kiểm tra các điều kiện
trong các hàm của bạn. Ví dụ, nếu bạn có một hàm nhận
một tham số mà phải nằm trong khoảng từ 0 đến 10, bạn
có thể sử dụng assert_param
để kiểm tra điều này:
void MyFunction(int param)
{
// Kiểm tra tham số đầu vào phải nằm trong khoảng từ 0 đến 10
assert_param(param >= 0 && param <= 10);
// Phần còn lại của hàm
}
Ví dụ đầy đủ
Dưới đây là một ví dụ đầy đủ về việc sử dụng assert_param
trong một chương trình STM32:
#include "main.h"
#include <stdio.h>
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
printf("Wrong parameters value: file %s on line %d\r\n", file, line);
while(1)
{
}
}
#endif /* USE_FULL_ASSERT */
void MyFunction(int param)
{
assert_param(param >= 0 && param <= 10);
// Phần còn lại của hàm
}
int main(void)
{
// Khởi tạo hệ thống
HAL_Init();
SystemClock_Config();
// Sử dụng hàm với tham số hợp lệ
MyFunction(5);
// Sử dụng hàm với tham số không hợp lệ
MyFunction(15);
while (1)
{
}
}
Tệp stm32fxx_hal_conf.h
#ifndef __STM32FXX_HAL_CONF_H
#define __STM32FXX_HAL_CONF_H
/* ... các định nghĩa và cấu hình khác ... */
/* Định nghĩa USE_FULL_ASSERT để kích hoạt assert_param */
#define USE_FULL_ASSERT
/* ... các định nghĩa và cấu hình khác ... */
#endif /* __STM32FXX_HAL_CONF_H */
Tổng kết
assert_param
là một công cụ hữu ích để kiểm tra tính hợp lệ của các tham số trong các hàm của bạn.
USE_FULL_ASSERT cần được định nghĩa trong tệp cấu hình để kích hoạt assert_param
.
assert_failed là hàm sẽ được gọi khi một điều kiện assert_param
không thỏa mãn,
và bạn có thể định nghĩa hàm này để thực hiện các hành động xử lý lỗi, như in ra
thông báo lỗi hoặc dừng chương trình.
Sử dụng assert_param
giúp bạn phát hiện sớm các lỗi liên quan đến tham số và điều
kiện không hợp lệ trong quá trình phát triển và gỡ lỗi.