任务间的数据干扰通常是因为多个任务不受控制地访问了相同的资源,比如全局变量、硬件外设(如UART、SPI)或者内存区域。
1.可以试试使用临界区(开关全局中断)来保护最关键的共享资源。
在裸机编程中,保护一个全局变量最直接的方法:
// 定义一个共享变量
volatile uint32_t g_shared_counter = 0;
// 任务A需要增加这个计数器
void Task_A(void) {
// ... 其他逻辑
// 进入临界区,关闭全局中断
__disable_irq();
g_shared_counter++;
// 退出临界区,打开全局中断
__enable_irq();
// ... 其他逻辑
}
2.将共享硬件外设(如SPI)的访问封装成一个独立的任务,其他任务通过消息队列向其发送操作请求。
|