以下是关键部分函数
初始化
Code: Select all
STATIC MUTEX_HANDLE gx_dis_mutex=NULL;
VOID_T display_init()
{
if(gx_dis_mutex=NULL)
tal_mutex_create_init(&gx_dis_mutex);
screen_init();
display_set_page(PAGE_MAIN);
}
任务1,由主线程调用的一个死循环函数,优先级4
Code: Select all
VOID_T display_test_video()
{
UINT8_T i = 0;
while(1)
{
tal_mutex_lock(gx_dis_mutex);
TAL_PR_NOTICE("\r\ndisplay video start \r\n");
screen_draw_image(0,0,40,54,gb_co2_nums[i]);
tal_mutex_unlock(gx_dis_mutex);
TAL_PR_NOTICE("\r\ndisplay video end \r\n");
tal_system_sleep(100);
i++;
if(i==10)
{
i=0;
}
}
}
任务2为其他线程调用的一个显示函数,优先级1
Code: Select all
VOID_T display_set_co2(UINT16_T value)
{
UINT8_T str[5];
UINT8_T i=0;
UINT8_T num;
UINT16_T x;
tal_mutex_lock(gx_dis_mutex);
TAL_PR_NOTICE("\r\nco2 value display start=%d \r\n",value);
if(value>999)
{
num=4;
}
else if(value>99)
{
num=3;
}
else if (value>9)
{
num=2;
}
else
{
num=1;
}
x=160-(num*20);
snprintf(str, sizeof(str), "%d", value);
// TAL_PR_NOTICE("co2 value str=%s",str);
// TAL_PR_NOTICE("co2 value drwx=%d",x);
// if(value<1000)
// {
// screen_fill(80,115,20,54,0xFFFF);
// screen_fill(220,115,20,54,0xFFFF);
// }
while ((str[i]>=0x30)&&(str[i]<=0x39))
{
screen_draw_image(x,115,40,54,gb_co2_nums[str[i]-0x30]);
i++;
x+=40;
}
tal_mutex_unlock(gx_dis_mutex);
TAL_PR_NOTICE("\r\nco2 value display end=%d \r\n",value);
}
执行一阵子之后,最终输出日志显示两个进程都进到了lock里面,同时打印了:co2 value display start=667 和display video start
Code: Select all
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:49 ty N][31c][display.c:101]
display video start
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:49 ty N][31c][display.c:101]
display video start
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:49 ty N][31c][display.c:101]
display video start
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:49 ty N][31c][display.c:101]
display video start
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:49 ty N][31c][display.c:101]
display video start
[03-26 17:59:49 ty N][31c][display.c:104]
display video end
[03-26 17:59:50 ty N][1ea][co2.c:294]
CO2 value=667
[03-26 17:59:50 ty N][1ea][display.c:51]
co2 value display start=667
[03-26 17:59:50 ty N][31c][display.c:101]
display video start
[03-26 17:59:50 ty N][407][battery.c:36]
ADC0 value = 48
[03-26 17:59:54 ty D][tuya_devos_health.c,lr:0x2178993] feed watchdog
[03-26 18:00:04 ty D][tuya_devos_health.c,lr:0x2178993] feed watchdog
[03-26 18:00:04 ty D][iot_httpc.c,lr:0x218e575] Post Data: {"devId":"6c161ad4f22344649famwg","t":1742983204}
[03-26 18:00:04 ty D][iot_httpc.c,lr:0x218e683] Post URL: https://a6.tuyacn.com/d.json?a=tuya.device.timer.astronomical.list&devId=6c161ad4f22344649famwg&et=3&t=1742983204&v=1.0&sign=61a1eb35a93072073f0c747085d3ea59
[03-26 18:00:04 ty D][httpc.c,lr:0x2186f71] Connect: a6.tuyacn.com Port: 443 -->>
[03-26 18:00:04 ty D][uni_network.c,lr:0x2169f0b] unw_gethostbyname a6.tuyacn.com, prio 1
[03-26 18:00:04 ty D][uni_network.c,lr:0x2169f6b] use dynamic dns ip:47.116.198.59 for domain:a6.tuyacn.com
tkl_net_socket_create type(0), fd(3)!