STM32 Keil静态全局变量值被修改

在基于FreeRTOS的STM32开发中,因函数参数类型与传入参数不一致,导致静态全局变量`s_chA`和`s_intB`值异常。在任务taskA中,`GpioGet`函数被调用时,将char类型的`s_chA`传入int指针参数,触发内存错误。通过排查和修改`GpioGet`函数参数类型为`unsigned char*`,解决了问题。程序员应严格检查类型匹配,防止类似内存异常。
摘要由CSDN通过智能技术生成

基于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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值