Skip to content

Commit 5068329

Browse files
authored
fix:[stm32][lcd]Error in control call of lcd test function (#10040)
* Optimize the lcd_test function to call it in thread to prevent the CLI environment from being unavailable after execution.
1 parent 272c9e2 commit 5068329

File tree

1 file changed

+32
-11
lines changed
  • bsp/stm32/libraries/HAL_Drivers/drivers

1 file changed

+32
-11
lines changed

bsp/stm32/libraries/HAL_Drivers/drivers/drv_lcd.c

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2006-2023, RT-Thread Development Team
2+
* Copyright (c) 2006-2025 RT-Thread Development Team
33
*
44
* SPDX-License-Identifier: Apache-2.0
55
*
@@ -363,11 +363,9 @@ INIT_DEVICE_EXPORT(drv_lcd_hw_init);
363363
#ifndef ART_PI_TouchGFX_LIB
364364
#ifdef DRV_DEBUG
365365
#ifdef FINSH_USING_MSH
366-
int lcd_test()
366+
static void lcd_thread(void *arg)
367367
{
368-
struct drv_lcd_device *lcd;
369-
lcd = (struct drv_lcd_device *)rt_device_find("lcd");
370-
368+
struct drv_lcd_device *lcd = (struct drv_lcd_device *)arg;
371369
while (1)
372370
{
373371
if (lcd->lcd_info.pixel_format == RTGRAPHIC_PIXEL_FORMAT_RGB565)
@@ -378,15 +376,15 @@ int lcd_test()
378376
lcd->lcd_info.framebuffer[2 * i] = 0x00;
379377
lcd->lcd_info.framebuffer[2 * i + 1] = 0xF8;
380378
}
381-
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
379+
rt_device_control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
382380
rt_thread_mdelay(1000);
383381
/* green */
384382
for (int i = 0; i < LCD_BUF_SIZE / 2; i++)
385383
{
386384
lcd->lcd_info.framebuffer[2 * i] = 0xE0;
387385
lcd->lcd_info.framebuffer[2 * i + 1] = 0x07;
388386
}
389-
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
387+
rt_device_control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
390388
rt_thread_mdelay(1000);
391389
/* blue */
392390
for (int i = 0; i < LCD_BUF_SIZE / 2; i++)
@@ -404,7 +402,7 @@ int lcd_test()
404402
lcd->lcd_info.framebuffer[3 * i + 1] = 0x00;
405403
lcd->lcd_info.framebuffer[3 * i + 2] = 0xff;
406404
}
407-
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
405+
rt_device_control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
408406
rt_thread_mdelay(1000);
409407
/* green */
410408
for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
@@ -413,7 +411,7 @@ int lcd_test()
413411
lcd->lcd_info.framebuffer[3 * i + 1] = 0xff;
414412
lcd->lcd_info.framebuffer[3 * i + 2] = 0x00;
415413
}
416-
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
414+
rt_device_control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
417415
rt_thread_mdelay(1000);
418416
/* blue */
419417
for (int i = 0; i < LCD_BUF_SIZE / 3; i++)
@@ -424,11 +422,34 @@ int lcd_test()
424422
}
425423
}
426424

427-
lcd->parent.control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
425+
rt_device_control(&lcd->parent, RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
428426
rt_thread_mdelay(1000);
429427
}
430428
}
431-
MSH_CMD_EXPORT(lcd_test, lcd_test);
429+
int lcd_test(void)
430+
{
431+
struct drv_lcd_device *lcd;
432+
lcd = (struct drv_lcd_device *)rt_device_find("lcd");
433+
if(lcd == RT_NULL)
434+
{
435+
LOG_E("Failed to find LCD device!\n");
436+
return -RT_ERROR;
437+
}
438+
439+
const char *thread_name = "lcd_test";
440+
rt_thread_t thread = rt_thread_create(thread_name, lcd_thread, lcd, 256, RT_THREAD_PRIORITY_MAX - 1, 10);
441+
if (thread != RT_NULL)
442+
{
443+
rt_thread_startup(thread);
444+
}
445+
else
446+
{
447+
LOG_E("%s created failed.", thread_name);
448+
return -RT_ERROR;
449+
}
450+
return RT_EOK;
451+
}
452+
MSH_CMD_EXPORT(lcd_test, Create thread test lcd);
432453
#endif /* FINSH_USING_MSH */
433454
#endif /* DRV_DEBUG */
434455
#endif /* BSP_USING_LCD */

0 commit comments

Comments
 (0)