代码拉取完成,页面将自动刷新
295
fix: Modified the mismatch between the print type and the variable type in the printf function
已关闭
相关的Issue
#16SXPI
原因(目的、解决的问题等)
大量文件涉及如下的问题,printf中(int)osThreadGetId()的类型和u%不匹配。
osThreadld_t是一个指向线程控制块(TCB)的指针,因此它的实际类型和大小取决于特定的RTOS实现。在查阅了Thread Management CMSIS-RTOS API v2等资料后,确定使用无符号整数打印可能会产生错误,因为无符号整数类型的大小与指针类型的大小可能不同。
问题代码如下:
printf("[Boot Test][TaskID:%u][Step:%u][Reg Finish S:%s, F:%s]Time: %llu!\n",
(int)osThreadGetId(), g_initIndex++, parent->GetName(parent), feature->GetName(feature),
SAMGR_GetProcessTime());
描述(做了什么,变更了什么)
修改了printf函数中打印类型与变量类型不匹配的地方,将u%改为%p,将(int)类型转换改为(void*)
在一般情况下,为了正确地打印osThreadld_t类型的值,应该使用"%p"格式说明符,并将其强制转换为void*指针。这将打印出一个十六进制值,表示指向线程控制块的指针。
将上述问题代码修正如下:
printf("[Boot Test][TaskID:%p][Step:%u][Reg Finish S:%s, F:%s]Time: %llu!\n",
(void*)osThreadGetId(), g_initIndex++, parent->GetName(parent), feature->GetName(feature),
SAMGR_GetProcessTime());