事情是这样的,我在RTT中添加了LCD显示,将ctime(&now)格式化后的时间字符串打印出来,没问题,使用LCD显示函数打印直接报总线错误。会显示第一次的时间,之后就报总线错误。下面是我的代码:注释部分是报错的代码,前面的代码是可以正常打印到LCD的。
报错串口打印的信息:
/led 线程/
void led1_thread_entry(void* parameter)
{
ILI9806G_DispStringLine_EN(LINE(0),"time");
LCD_SetFont(&Font16x32);
LCD_SetColors(RED,YELLOW);
time_t now;
char buf[100];
buf[0] = '\0';
char time2lcd[25] = {0};
time2lcd[0] = '\0';
struct tm tm_now;
struct tm nowtime;
while(1)
{
/ 获取时间 */
now = time(RT_NULL);//获取的是一个秒数;
tm_now = localtime(&now);
memcpy(&nowtime, tm_now, sizeof(struct tm));
rt_kprintf("%d-%d-%d-%d,%d:%d:%d\r\n", nowtime.tm_year+1900,nowtime.tm_mon+1,nowtime.tm_mday,nowtime.tm_wday,nowtime.tm_hour,nowtime.tm_min,nowtime.tm_sec);
sprintf(buf, "%04d-%02d-%02d,%d:%d:%d", (int)(nowtime.tm_year + 1900), (int)(nowtime.tm_mon + 1), (int)nowtime.tm_mday,nowtime.tm_hour,nowtime.tm_min,nowtime.tm_sec);
rt_kprintf("%s\r\n", buf);
ILI9806G_DispStringLine_EN(LINE(7),buf);
// strcat(time2lcd,ctime(&now));//将ctime(&now)格式化后的时间字符拷贝到字符串time2lcd
// rt_kprintf("%s\r\n", time2lcd);//打印到串口
// rt_kprintf("%d\r\n", strlen(time2lcd));//测量长度为25
// ILI9806G_DispStringLine_EN(LINE(2), time2lcd);//打印到显示器,会打印一次然后报错
// memset(time2lcd,'\0',strlen(time2lcd));//字符数组清零。
//
rt_thread_mdelay(1000);
}
}
更多回帖