playandlearn 发表于 2020-5-19 23:37:31

在RAM中运行程序时,全局变量值无法修改?

芯片:STM32F429BIT6
软件库:HAL库
问题描述:想将数据通过该官方的External flash烧写进spi flash中,结果是无法与spi flash正常通讯,而用其他工程是能够正常通讯的。经定位发现问题是出在全局变量的hspi.state默认不是HAL_SPI_STATE_RESET且不可修改,导致HAL_SPI_MspInit()函数未执行。下图中提供测试代码,测试代码1中hspi1.state的值无法修改且会跑进判断语句中,测试代码2中的hspi2.state的值可修改,且不会跑进判断语句中。请问为什么会出现这种情况?



toofree 发表于 2020-5-20 09:20:25

定义结构体时,对结构体成员都初始化一下看看

playandlearn 发表于 2020-5-20 09:34:51

toofree 发表于 2020-5-20 09:20
定义结构体时,对结构体成员都初始化一下看看

之前有在定义时将hspi1 = {0};以及在init()函数中将hspi.state = 0,依然会跑进判断分支。

lebment 发表于 2020-5-20 10:40:52

上楼意思是你调试看看,我觉得看看也解决不了问题,敷衍式回答。
我的经验,即使是官方的,MDK有些Ex Flash 算法不可靠的,你用的硬件一致?你换个IDE,比如CubeIDE试试。
你定位问题,我并不是很赞同,烧写算法会改变SPI的寄存器,
看你这个工程,你想写一个MDK烧写算法,不用HAL库比较容易,寄存器操作吧,或者sdlib。
我已经成功写了F7的MDK QSPI烧写算法和Cubeprogrammer的烧写算法,一用HAL就不行。
页: [1]
查看完整版本: 在RAM中运行程序时,全局变量值无法修改?