你好
我用 HMC5883L 芯片在单次测量模式下测量磁场、并通过 UART 将数据传输到 PC。
使用 sprintf 函数时、程序崩溃(进入 faultISR 循环)。 通常、它仅在第二次使用该函数时发生、并且第一次调用的所有内容实际上都通过 UART 良好地传输(不是每次都这样)。
我曾尝试在项目属性窗口中将堆和堆栈大小增加到3072和2048、但这样没有解决问题。
以下是使用 sprintf 函数的程序部分:
uint32_t measxL、measxH、measyL、measyH、measzL、 measzh;
int16_t measx、measy、measz;
char meas[30];
while (1) //每个周期都将进行测量
{
//单测量模式
reg = 0x02;//连接到 CRA 寄存器
值= 0x01;//单测量模式
HMC_I2C_TRANSMIT (SLAVE_ADDRESS、reg、value);//发送到 HMC5883L 进行配置
vTaskDelay (10/portTICK _RATE_MS);//等待10ms 以便执行测量(也可以监控 DRDY)
//读取 HMC5883L 寄存器中的数据
HMC_I2C_measurement (SLAVE_ADDRESS、0x06、&measxL、&measxH、&measyL、 &measyH、&measzL、&measzH);
measx =((measxH & 0xFF)<< 8)| measxL;
measy =((measyH & 0xFF)<< 8)| measyL;
measz =((measzH & 0xFF)<< 8)| measzL;
sprintf (测量值、"%d、%d、%d"、measx、measy、measz);
uart0_printstring (meas);
vTaskDelay (1000/ portTICK _RATE_MS);//等待1000ms 以便进行下一次测量
}
我刚开始使用该微控制器、所以是初学者。 我已经尝试查看其他类似这样的帖子: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1186770/tm4c123gh6pm-sprintf-with-float---printf_support-full-and-stack-size-to-1024-crashes
但它没有解决我的问题,最后一个对我来说,在这个时候太先进了。
我已经包含了所需的库、CCS 没有给我任何抱怨。
此致、
西蒙