目前为了糊口,做了硬件工程师,因此博客也很久没更新了。目前也只能业余时间自己玩玩喜欢的东西。
最近在研究FOC时候,发现STM32在运行“atof”函数时候,导致程序进入了hard fault中断中。
事情的起因是这样的:
我已经通过Jlink的RTT功能,替代了单片机的串口日志输出。翻阅其头文件后,发现提供了RTT_read相关的功能。因此我简单做了个读取功能。
#define MAX_RTT_LENGTH 32
typedef struct __msg_recv_t {
uint16_t len;
uint8_t data[MAX_RTT_LENGTH];
}msg_recv_t;
msg_recv_t msg_recv = {
.len = 0,
.data = {0},
};
void getMsg(void) {
if (SEGGER_RTT_HasData(0)) {
SEGGER_RTT_ReadNoLock(0, msg_recv.data, MAX_RTT_LENGTH);
_SEGGER_RTT.aDown[0].WrOff = 0;
_SEGGER_RTT.aDown[0].RdOff = 0;
msg_recv.len = strlen((char *)msg_recv.data) - 1;
}
}
void msg_analysis(void) {
getMsg();
if (msg_recv.len != 0 && msg_recv.data[0] == 'T') {
printBuf("get msg is", msg_recv.data, msg_recv.len, 8);
printf("data is {%s}\n", msg_recv.data);