基于freertos进行开发:
1、在a.c文件中定义了char类型静态变量s_chA[8],在b.c文件中定义了int类型静态变量s_intB;
2、定义函数int GpioGet(unsigned int id, unsigned int*value);
3、在任务taskA中,通过GpioGet函数循环查询对应的GPIO电平状态,
GpioGet(0, &s_chA[0]);
GpioGet(1, &s_chA[1]);
GpioGet(2, &s_chA[2]);
GpioGet(3, &s_chA[3]);
GpioGet(4, &s_chA[4]);
GpioGet(5, &s_chA[5]);
GpioGet(6, &s_chA[6]);
GpioGet(7, &s_chA[7]);
......
4、在任务taskB中,会读取s_intB的值进行相应的操作;
问题:在程序执行时,执行结果与预期有差异,通过打断点发现s_intB的值发生了非正常变化;
解决过程:1、怀疑内存冲突,逐个屏蔽任务,发现屏蔽taskA任务时,执行正常;
2、打开taskA任务,屏蔽所有GpioGet函数,执行正常;
3、分析发现GpioGet函数参数为unsigned int *,而实际传入数据类型为ch