This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好
我用 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 没有给我任何抱怨。
此致、
西蒙
> sprintf (测量值、"%d、%d、%d"、measx、measy、measz);
第一步:将其替换为:
> snprintf (meas、sizeof (meas)、"%d、%d、%d"、(int32_t) measx、(int32_t) measy、(int32_t) measz);
即使它不能修复您的(即刻)症状、它也可以避免许多危险。
您好、Simon、
首先尝试布鲁斯的建议。 除此之外、我建议使用以下文档尝试跟踪触发问题的原因: https://www.ti.com/lit/pdf/spma043
如果在调用之前使用了大量堆栈、则增加的可能性还不够、但如果这是堆栈问题、我会感到意外。
我真的同意 Amit 在之前的一个线程中的帖子只是使用 TivaWare 中的 UARTprintf、因为你只是在做 UART --> PC。
此致、
拉尔夫·雅各比