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

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

[复制链接]
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
收藏 评论0 发布时间:2026-4-23 00:01

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版