【发布时间】:2022-01-10 00:44:44
【问题描述】:
最近一直在做STM32编程。我尝试编写自己的函数并将其插入生成的代码中,但奇怪的是该函数不起作用。调试时,控制器在函数调用点挂起。 谁能帮我这个? 如果有任何帮助,我将不胜感激! 附上代码。 (不相关部分被剪掉)[iOut_ref 不用于 DMA 例程]
/* USER CODE BEGIN PD */
#define MAX_MEASURED_VALUE 3.3
#define MAX_VALUE 4095
/* USER CODE END PD */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
uint16_t iOut_ref = 0;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN PFP */
void ChangeRefValue(uint16_t*, float);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void ChangeRefValue(uint16_t* valueRef, float fValueRef)
{
*valueRef = (int)(MAX_VALUE * (fValueRef / MAX_MEASURED_VALUE));
}
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
ChangeRefValue(&iOut_ref, 3.3);
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
... ```
【问题讨论】:
-
您的程序在无限循环中调用相同的函数。这个函数也可以完全优化掉,因为它产生了一个恒定的结果。不确定您所说的“控制器挂起”是什么意思,但这几乎就是它的样子——一个无所事事的无限循环。
-
挂起是什么意思?你能中断程序执行吗?
-
调试时,变量的变化应该是可见的,并且应该可以“跳过”。但是什么也没发生,我只能取消调试。
-
@EugeneSh。如果使用浮点指令且未启用 FPU,则可能导致 HF。但在这种微不足道的情况下不太可能
-
@AlexanderMenzel 不,它不必是可见的,因为这个变量很可能会被优化掉。所以你不会看到它。