完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现象
添加emwin后编译能够通过,链接的时候报错,符号超出地址范围 错误打印类似如下 .Objectsprinter.axf: Error: L6406E: No space in execution regions with .ANY selector matching guiconf.o(.bss). .Objectsprinter.axf: Error: L6406E: No space in execution regions with .ANY selector matching heap_4.o(.bss). .Objectsprinter.axf: Error: L6406E: No space in execution regions with .ANY selector matching startup_stm32f2xx.o(STACK). 解决方法 GUIConf.c 中定义了GUI可用的flash字节数,默认很大,改小即可 // Define the available number of bytes available for the GUI // the orign GUI_NUMBYTES is too larger //#define GUI_NUMBYTES 0x200000 #define GUI_NUMBYTES 0xc800 FRAMEWIN 界面在freertos调度之前初始化可以正常显示,在任务中无法正常运行 现象 xTaskCreate(task_helloworld, "hello world", 64, NULL, 1, NULL); xTaskCreate(task_touch, "touch", 128, NULL, 2, &handle_touch); xTaskCreate(task_ui, "ui", 1024, NULL, 1, &handle_gui); 创建了3个任务,其中任务hello world 和 touch 能够同时加入执行,一旦加入ui task,就会卡死,去掉ui 任务就能正常调度 解决方法 怀疑堆栈溢出 把ui task 堆栈大小改为512, 仅保留这一个任务,发现ui能够正常显示 这时再加入hello world 任务,hello world 任务也能够正常得到执行 此时再加入touch任务,又出现卡死现象 基本确定堆栈不够用 尝试修改启动文件中的栈大小 Stack_Size EQU 0x00001800 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp 将栈大小由原来的0x800改为0x1800, 问题解决 在UI中触摸无法触发事件 现象 触摸驱动本身调试ok, 也通过如下触摸任务不断更新触摸状态 void touch_update(void) { GUI_PID_STATE pstate; if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10)) { pstate.Pressed = 0; goto store; } touch_read_phy(); touch_trans(&pstate, &g_touch); printf("pressed=%d, (%d,%d)rn", pstate.Pressed, pstate.x, pstate.y); store: GUI_PID_StoreState(&pstate); } 但触摸FRAME_WIN中的控件,仍然没有触摸事件产生,确认配套版本的emwin 参考手册,确认操作方法没错,查看 GUI_PID_STATE 的定义,发现只有Layer没有赋值 typedef struct { int x,y; U8 Pressed; U8 Layer; } GUI_PID_STATE; 查看emwin配置GUIConf.h #define GUI_NUM_LAYERS 2 // Maximum number of available layers 猜测是不是因为Layer没有赋值而导致传错了Layer, 尝试在代码中添加pstate.Layer = 0; 添加后部分代码如下 GUI_PID_STATE pstate; pstate.Layer = 0; if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10)) { 再次测试,能够触发触摸事件,问题得到解决 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3458 浏览 1 评论
9002 浏览 16 评论
4051 浏览 18 评论
1112浏览 3评论
573浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
570浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2303浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1859浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 02:15 , Processed in 1.294154 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号