我在 stm32f411ret6 上使用 math.h 库的日志时遇到问题。 当我正常传递一个值来记录时,例如。
double var = log(2.0);
比我在 var 中得到 0.69314718056 。 当我使用 stm32 以外的变量传递值时,转到 HardFault_Handler 等式
double var1 = 2.0;
double var2 = log(var1);
我的代码。
#include "main.h"
int main(void)
{
double val = 2.0;
double cos = log(2.0);
double result = log((double)val);
Board_Init();
for(;;);
}
即使对于计算日志的自定义函数也存在同样的问题。
int main(void)
{
double val = 2.0;
double cos = log(2.0);
// double result = log((double)val);
double result = Math_Log(2.0, 2.7182);
Board_Init();
for(;;);
}
double Math_Log(double number , double base)
{
double low = 0, high = number;
double epsilon = 0.000001;
while (high - low > epsilon) {
double mid = (low + high) / 2;
double power = 1;
for (int i = 0; i < mid; ++i) {
power *= base;
}
if (power < number) {
low = mid;
} else {
high = mid;
}
}
return low;
}
我使用stm32cubeIDE并且我标记了选项“使用C数学库”
很高兴知道是什么导致了这个问题
我明白了。 问题在于协处理器的访问权限。 修复:
SCB->CPACR |= 0x0F << 20;
将其添加到 main 的开头;