你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

求助,局部变量初始化时未赋值会导致什么后果?

[复制链接]
Ha~ha~ 提问时间:2026-4-23 00:01 / 未解决
    芯片STM32F407VGT6。
    最近做一个单片机的项目,需要使用IO口模拟SPI通信,来给DSP加载数据,数据量较大,程序如下图。
变量 i 在定义后,没有赋初始值,编译器的优化等级是 -(O0),运行时DSP程序加载失败。将编译器的优化等级调整到-(O1)后,DSP加载正常;给变量赋初值 0,编译器的优化等级保持-(O0),DSP加载正常。
    请问是什么原因导致的?
    即使未赋初值,但是在for循环开始的时候不是也有i = 0吗?
代码如下:

static void SPI_Delay_(unsigned int t)
{
        while(t--);
}

void SPIWriteByte(unsigned int writedat)
{
        unsigned char i;         

        for(i=0;i<32;i++)
        {
                LL_GPIO_ResetOutputPin(GPIOE, LL_GPIO_PIN_2);

                SPI_Delay_(20);

                if(writedat & 0x01)
                        LL_GPIO_SetOutputPin(GPIOE, LL_GPIO_PIN_4);
                else
                        LL_GPIO_ResetOutputPin(GPIOE, LL_GPIO_PIN_4);
                 
                writedat>>=1;
                               
                LL_GPIO_SetOutputPin(GPIOE, LL_GPIO_PIN_2);

                SPI_Delay_(40);
        }
        LL_GPIO_ResetOutputPin(GPIOE, LL_GPIO_PIN_2);
}

void load_dsp_program(const unsigned int pData[],unsigned int len)
{
        unsigned int i = 0;
        LL_GPIO_ResetOutputPin(GPIOE, LL_GPIO_PIN_1);
        delay_us(20);
        for(i=0;i<len;i++)
        {
                SPIWriteByte(pData);
        }

        delay_us(50);                        
        LL_GPIO_SetOutputPin(GPIOE, LL_GPIO_PIN_1);
}

屏幕截图 2026-04-23 000217.png
收藏 评论1 发布时间:2026-4-23 00:01

举报

1个回答
butterflyspring 回答时间:2026-4-28 16:38:03
因为DSP是通过F407的SPI 通讯的,可以通过示波器或逻辑分析仪观测一下SPI的发送。

找出异常就等方便定位了。

当然也可以边调试边测量,比如看看前几个字节发送的是否正常。
调试时注意看看两个i的内存分配和数值状况。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版