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

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

[复制链接]
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版