完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在安富莱V6的板子上,使用的官方BSP,LCD_TEST SDRAM_TEST均正常,已打开CRC,其他任务均未打开,初始化后LED闪烁正常,但STEMWIN停在gui_init()无法往后执行,其他线程LED闪烁正常,默认参数均未修改。 #define GUI_NUMBYTES (60*1024) //60为ENV默认的大小。 请大佬赐教,我查找了几天了。 |
|
相关推荐
7个回答
|
|
|
|
|
|
我不确定是不是这个函数崩溃的,但是gui_init后没反应了,其他线程还在运行,我是新手菜鸟,代码如下:
GUI_NUMBYTES=60k void GUI_X_Config(void) { // // 32 bit aligned memory area // static U32 aMemory[GUI_NUMBYTES / 4]; // // Assign memory to emWin // GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES); GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); // // Set default font // GUI_SetDefaultFont(GUI_FONT_6X8); rt_kprintf(“guiINIT ing222n”); } define STM32_SRAM_SIZE (192) define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) define STM32_FLASH_SIZE (2 1024 1024) define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) extern int ImageRW_IRAM1RW I RAM1ZI$$Limit; define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) define HEAP_END STM32_SRAM_END 请赐教 |
|
|
|
其它线程还在运行?可以确定死循环在哪儿了吗?在线调试应该可以看出来的。
|
|
|
|
在这里面,串口最后输出666 555 666,然后没了
int LCD_X_DisplayDriver(unsigned LayerIndex, unsigned Cmd, void *pData) { int r; (void)LayerIndex; (void)pData; switch (Cmd) { case LCD_X_INITCONTROLLER: { // // Called during the initialization process in order to set up the // display controller and put it into operation. If the display // controller is not initialized by any external routine this needs // to be adapted by the customer... // // ... rt_kprintf("guiINIT ing555n"); return 0; } default: r = -1; rt_kprintf("guiINIT ing666n"); } return r; } |
|
|
|
最近又查了下,是GUIConf.c文件中的_SetPixelIndex _GetPixelIndex _FillRect函数中调用了rt_graphix_ops(lcd_device)->set_pixel((const char *)&PixelIndex, x, y);类似的来操作,这个结构体一共包含5个函数,不知道怎么调用和实现的,反正死在这几个里面:
struct rt_device_graphic_ops { void (set_pixel) (const char pixel, int x, int y); void (get_pixel) (char pixel, int x, int y); void (*draw_hline)(const char *pixel, int x1, int x2, int y); void (*draw_vline)(const char *pixel, int x, int y1, int y2); void (*blit_line) (const char *pixel, int x, int y, rt_size_t size); }; define rt_graphix_ops(device) ((struct rt_device_graphic_ops *)(device->user_data)) |
|
|
|
但是我没有启用RT_USING_DEVICE_OPS,drv_lcd里没有也没有实现OPS的函数,只是用了 device->init = drv_lcd_init;device->control = drv_lcd_control;实现了这两个函数后lcd_test正常.所以是不是GUIConf.c文件中的_SetPixelIndex _GetPixelIndex _FillRect函数要自行修改。驱动中设置如下:
{ device->type = RT_Device_Class_Graphic; ifdef RT_USING_DEVICE_OPS device->ops = &lcd_ops; else device->init = drv_lcd_init; device->control = drv_lcd_control; endif /* register lcd device */ rt_device_register(device, "lcd", RT_DEVICE_FLAG_RDWR); } |
|
|
|
我只用过这个 _FillRect 肯定要自己实现的,LCD_X_Config 设置的回调函数都需要自己实现。
rtt 提供的那个 rt_device_graphic_ops 接口,没多大用,对于第三方 gui ,它不吃你这一套,还是按照 emwin 本来的操作来的舒服。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1651 浏览 0 评论
1516 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6754 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1881 浏览 0 评论
4135 浏览 0 评论
78811 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-3 15:59 , Processed in 0.612354 second(s), Total 80, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号