Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
emwin
stemwin
关于rtthread中STemWin中GUI_OS的支持问题,画面无法显示
发布于 2022-06-20 10:49:22 浏览:802
订阅该版
官方默认给出的stemwin软件包都是支持GUI_OS的,只不过对应的库文件需要自己去官方进行下载,在这里调试过程中出现了如下的问题: 1、GUI初始化放在一个线程中,执行也在一个线程中,使用GUI_Exec();来不断的刷新GUI任务。 2、GUI的应用画图等等API在另外一个线程中 3、但是初始化完成后出现无法正常显示GUI的情况,经检查后屏蔽下面的三段代码就可以正常显示了。GUI_Exec()执行过程中没有执行到底层相关的代码(就是指执行窗口或者画点等等函数,而是直接跳出,由于stemwin官方的库文件没有源码,所以来求助) ```c void GUI_X_Unlock(void) { rt_mutex_release(osMutex); } void GUI_X_Lock(void) { rt_mutex_take(osMutex, RT_WAITING_FOREVER); } /* Get Task handle */ U32 GUI_X_GetTaskId(void) { rt_uint8_t id = rt_thread_self()->current_priority; return ((U32)id); } ``` 初步怀疑是这里互斥量、id和emwin库文件之间存在关系,导致一些执行程序无法很好的执行。 下面是本工程中涉及的一些初始代码:用于图片的显示: ```c static rt_sem_t dynamic_sem = RT_NULL; /********************************************************************************************* * 名称:emwin_init() * 功能:emWin初始化 * 参数:无 * 返回:无 * 修改: * 注释: *********************************************************************************************/ void emwin_init(void) { __HAL_RCC_CRC_CLK_ENABLE(); // 开启CRC时钟 GUI_Init(); // emWin初始化 WM_SetCreateFlags(WM_CF_MEMDEV); // 窗口启用内存设备 GUI_UC_SetEncodeUTF8(); // 使用UTF-8编码 } /********************************************************************************************* * 名称:emwin_timer_handle() * 功能:emWin定时器超时回调函数 * 参数:*parameter -> 传入参数(暂无) * 返回:无 * 修改: * 注释: *********************************************************************************************/ void gui_thread_handle(void *parameter) { (void)parameter; static unsigned char count = 0; emwin_init(); rt_sem_release(dynamic_sem); while(1){ count++; if(count % 2 == 0) GUI_Exec(); // 执行所有挂起的 emWin 任务 #if EMWIN_USE_TOUCH // 是否使用触摸屏 GUI_TOUCH_Exec(); // 传输触摸信息到 emWin #endif rt_thread_delay(10); } } /********************************************************************************************* * 名称:gui_init() * 功能:emWin gui初始化 * 参数:无 * 返回:初始化是否成功 * 修改: * 注释: *********************************************************************************************/ int gui_init(void) { rt_thread_t tid; dynamic_sem = rt_sem_create("dsem", 0, RT_IPC_FLAG_PRIO); tid = rt_thread_create("gui_thread", gui_thread_handle, RT_NULL, 2048, RT_THREAD_PRIORITY_MAX - 2, 10); if (tid != RT_NULL) rt_thread_startup(tid); rt_sem_take(dynamic_sem, RT_WAITING_FOREVER); rt_sem_delete(dynamic_sem); return RT_EOK; } INIT_APP_EXPORT(gui_init); ``` 以上是gui线程的初始化,不断执行GUI_Exec() ```c #include "gui_thread.h" #include "STemWin-latest/emwin_thread.h" extern GUI_CONST_STORAGE GUI_BITMAP bmrtt; extern GUI_CONST_STORAGE GUI_BITMAP bmfavicon; /********************************************************************************************* * 名称:gui_thread_entry() * 功能:GUI线程入口函数 * 参数:*parameter -> 入口参数(暂无) * 返回:无 * 修改: * 注释: *********************************************************************************************/ void gui_thread_entry(void *parameter) { (void)parameter; GUI_SetBkColor(GUI_WHITE); // 设置背景颜色 GUI_Clear(); // 清除当前窗口,刷新为背景颜色 GUI_DrawBitmap(&bmfavicon, 128, 40); // 在指定位置显示图片 GUI_SetFont(&GUI_Font8x16); // 设置当前字体 GUI_GotoXY(128, 115); // 跳转到指定位置 GUI_SetColor(GUI_BLACK); // 设置当前前景色 GUI_DispString("Zonesion"); // 在当前位置显示字符串 GUI_DrawBitmap(&bmrtt, 57, 135); // 在指定位置显示图片 } /********************************************************************************************* * 名称:gui_thread_init() * 功能:GUI线程初始化 * 参数:无 * 返回:初始化是否成功 * 修改: * 注释: *********************************************************************************************/ int gui_thread_init(void) { rt_thread_t gui_thread = RT_NULL; gui_thread = rt_thread_create("gui", // 线程名称 gui_thread_entry, // 线程入口函数 RT_NULL, // 线程入口函数传入参数 1024, // 线程堆栈大小 10, // 线程优先级 20); // 时间片 if(gui_thread == RT_NULL) return -1; return rt_thread_startup(gui_thread); // 启动线程 } ``` 以上是启动显示图片的线程 ```c /********************************************************************************************* * 文件:main.c * 作者:Zhouchj 2020.09.23 * 描述:用户main函数源文件 * 修改: * 注释: *********************************************************************************************/ #include "gui_thread.h" #include "STemWin-latest/emwin_thread.h" int main(void) { // gui_init(); // 初始化GUI线程 gui_thread_init(); // GUI线程初始化 return 0; } ``` main只是起到启动gui显示的应用 如上三个就是主要的代码,最终显示不成功,屏蔽的gui 中OS的支持就可以正常,请问问题出在哪儿,是初始化GUI的方式不对么?
查看更多
出出啊
2022-06-20
恃人不如自恃,人之为己者不如己之自为也
`GUI_X_Lock` 被调用到了吗? `gui_thread_entry` 这个函数执行结束退出了也没有显示?
2
个回答
默认排序
按发布时间排序
w809291634
2022-07-04
这家伙很懒,什么也没写!
根据别人厂家提示,最好是单任务执行GUI的相关代码。多任务执行好像兼容性不是很好
撰写答案
登录
注册新账号
关注者
0
被浏览
802
关于作者
w809291634
这家伙很懒,什么也没写!
提问
2
回答
1
被采纳
0
关注TA
发私信
相关问题
1
在 studio 中添加emwin,编译报错问题
2
emwin 报警告怎么解决
3
使用littlevgl2rtt软件包实例运行不成功,emwin正常
4
战舰STM32F103ZET6开发板+emWin无法GUI_Init()
5
rt1052的usb与emwin
6
RTT H743 移植emwin 报错
7
emwin + 触摸屏 触摸屏获得的坐标信息怎么返回到emwin中
8
RT_Thread 中的emwin
9
在系统上移植stemwin,在gui_init()中线程终止
10
emwin 页面切换 有卡顿,约1S左右。
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部