lcd_bl_set_led_brightness 和 lcd_bias_set_led_brightness 函数源码如上,bl_lvl是否需要强制转换
时间: 2023-07-06 18:30:33 浏览: 41
根据您提供的源代码,`lcd_bl_set_led_brightness` 和 `lcd_bias_set_led_brightness` 函数都接受一个 `int` 类型的参数 `bl_lvl`,用于设置外部背光的亮度。在主函数中,通过将 `bl_lvl` 的地址传递给 `pthread_create` 函数,然后在线程函数中对 `bl_lvl` 进行解引用来获取背光亮度值。
因此,不需要对 `bl_lvl` 进行强制转换。在 `pthread_create` 函数中,将 `&bl_lvl1` 或 `&bl_lvl2` 强制转换为 `(void *)` 类型即可,然后在线程函数中将其转换回 `int` 类型即可获取背光亮度值。例如:
```c
void *lcd_bl_set_led_brightness(void *data)
{
int bl_lvl = *((int *)data);
// ...
}
```
这里将 `data` 强制转换为 `(int *)` 类型,然后对其进行解引用并赋值给 `bl_lvl` 变量。
总之,不需要对 `bl_lvl` 变量本身进行强制转换,只需要在传递给线程函数时将其地址强制转换为 `(void *)` 类型即可。
相关问题
创建一个可以在kernel4.19下执行的线程,需要同时并发执行这两个函数lcd_bl_set_led_brightness(bl_lvl)和lcd_bias_set_led_brightness(bl_lvl)
在Linux系统中,可以使用pthread库来创建线程。以下是一个示例代码,让你可以在kernel4.19下执行两个函数并发执行:
```c
#include <pthread.h>
void *lcd_bl_set_led_brightness(void *arg) {
// 第一个函数的代码
return NULL;
}
void *lcd_bias_set_led_brightness(void *arg) {
// 第二个函数的代码
return NULL;
}
int main() {
pthread_t thread1, thread2;
int bl_lvl = 50; // 亮度值
// 创建线程,分别执行上面的两个函数
pthread_create(&thread1, NULL, lcd_bl_set_led_brightness, (void *)&bl_lvl);
pthread_create(&thread2, NULL, lcd_bias_set_led_brightness, (void *)&bl_lvl);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
return 0;
}
```
这样就可以实现两个函数的并发执行了。注意,在多线程编程中,需要注意线程安全问题,例如共享变量的访问等。
如上面贴给你的dsi_panel_set_backlight这个函数,我需要在case DSI_BACKLIGHT_EXTERNAL:下,同时并发执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness两个函数来设置背光亮度。
要在case DSI_BACKLIGHT_EXTERNAL下同时并发执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness两个函数来设置背光亮度,可以使用多线程来实现。以下是一个简单的示例代码:
```c
int dsi_panel_set_backlight(struct dsi_panel *panel, u32 bl_lvl) {
int rc = 0;
struct dsi_backlight_config *bl = &panel->bl_config;
if (panel->host_config.ext_bridge_mode)
return 0;
DSI_DEBUG("backlight type:%d lvl:%d\n", bl->type, bl_lvl);
switch (bl->type) {
case DSI_BACKLIGHT_WLED:
rc = backlight_device_set_brightness(bl->raw_bd, bl_lvl);
break;
case DSI_BACKLIGHT_DCS:
rc = dsi_panel_update_backlight(panel, bl_lvl);
break;
case DSI_BACKLIGHT_EXTERNAL:
{
pthread_t thread1, thread2;
int bl_lvl1 = bl_lvl, bl_lvl2 = bl_lvl;
// 创建两个线程,分别执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness函数
pthread_create(&thread1, NULL, lcd_bl_set_led_brightness, (void *)&bl_lvl1);
pthread_create(&thread2, NULL, lcd_bias_set_led_brightness, (void *)&bl_lvl2);
// 等待线程结束
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
}
break;
case DSI_BACKLIGHT_PWM:
rc = dsi_panel_update_pwm_backlight(panel, bl_lvl);
break;
default:
DSI_ERR("Backlight type(%d) not supported\n", bl->type);
rc = -ENOTSUPP;
}
return rc;
}
```
在case DSI_BACKLIGHT_EXTERNAL下,我们创建了两个线程,分别执行lcd_bl_set_led_brightness和lcd_bias_set_led_brightness函数。线程的创建和等待使用了pthread库中的函数pthread_create和pthread_join。注意,在多线程编程中,需要注意线程安全问题,例如共享变量的访问等。