请教一个stm32+UCGUI动态显示图像的问题

闲着也是闲着552 2017-09-27 12:19:02
最近在用stm32f103vct6加UCGUI做一个涉及导航的项目,原理是通过蓝牙串口接收的数据显示导航状态图标(左转右转直行箭头什么的),所以编程的思路想用UCGUI的位图显示功能,把图标图像转换成C文件,然后通过对比数据加载不同图标,但是由于图标太多,编译总是通不过,提示溢出。代码简单呈现如下:

extern const GUI_BITMAP bmturn_back;
extern const GUI_BITMAP bmturn_branch_center;
extern const GUI_BITMAP bmturn_branch_left;
extern const GUI_BITMAP bmturn_branch_right;
//…………定义图像,很多,省略
extern const GUI_BITMAP bmturn_tollgate;

const int ShowIcon(char *str,int x,int y) {
GUI_BITMAP tt1;
int re = 0;
if (strcmp(str,"turn_back")) { tt1=bmturn_back; re = 1;};//对比串口传输数据,加载图像显示
if (strcmp(str,"turn_branch_center")) { tt1=bmturn_branch_center; re = 1; };
if (strcmp(str,"turn_branch_left")) { tt1=bmturn_branch_left; re = 1; };
if (strcmp(str,"turn_branch_right")) { tt1=bmturn_branch_right; re = 1; };
if (strcmp(str,"turn_branch_right_straight")){ tt1=bmturn_branch_right_straight; re = 1; };
if (strcmp(str,"turn_dest")) { tt1=bmturn_dest; re = 1; };
if (strcmp(str,"turn_front")) { tt1=bmturn_front; re = 1; };
if (strcmp(str,"turn_left_2branch_left")) { tt1=bmturn_left_2branch_left; re = 1; };
if (strcmp(str,"turn_left_2branch_right")) { tt1=bmturn_left_2branch_right; re = 1; };
if (strcmp(str,"turn_left_3branch_left")) { tt1=bmturn_left_3branch_left; re = 1; };
if (strcmp(str,"turn_left_3branch_middle")) { tt1=bmturn_left_3branch_middle; re = 1; };
if (strcmp(str,"turn_left_3branch_right")) { tt1=bmturn_left_3branch_right; re = 1; };
if (strcmp(str,"turn_left_back")) { tt1=bmturn_left_back; re = 1; };
if (strcmp(str,"turn_left_side")) {tt1=bmturn_left_side; re = 1};
if (strcmp(str,"turn_left_side_ic")) { tt1=bmturn_left_side_ic; re = 1;}
if (strcmp(str,"turn_left_side_main")) { tt1=bmturn_left_side_main; re = 1};
if (strcmp(str,"turn_right")) { tt1=bmturn_right; re = 1};
if (strcmp(str,"turn_right_2branch_left")) { tt1=bmturn_right_2branch_left; re = 1;}
if (strcmp(str,"turn_right_2branch_right")) { tt1=bmturn_right_2branch_right; re = 1;}
if (strcmp(str,"turn_right_3branch_left")) { tt1=bmturn_right_3branch_left; re = 1;}
if (strcmp(str,"turn_right_3branch_middle")) { tt1=bmturn_right_3branch_middle; re = 1;}
if (strcmp(str,"turn_right_3branch_right")) { tt1=bmturn_right_3branch_right; re = 1;}
if (strcmp(str,"turn_right_back")) { tt1=bmturn_right_back; re = 1;}
if (strcmp(str,"turn_right_front")) { tt1=bmturn_right_front; re = 1;}
if (strcmp(str,"turn_right_side")) { tt1=bmturn_right_side;}
if (strcmp(str,"turn_right_side_ic")) { tt1=bmturn_right_side_ic; re = 1;}
if (strcmp(str,"turn_right_side_main")) { tt1=bmturn_right_side_main; re = 1;}
if (strcmp(str,"turn_tollgate")) { tt1=bmturn_tollgate; re = 1;}
if (re==1) GUI_DrawBitmap(&tt1,x,y);
return re;
}


超过13个就会编译溢出,大量报错如下:
.\Output\Tiky_uCGUI_DEMO.axf: Error: L6406E: No space in execution regions with .ANY selector matching lcdinfo0.o(i.LCD_GetYSize).
请问这个问题如何解决?
...全文
280 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
辉_alexxm 2017-09-30
  • 打赏
  • 举报
回复
简单一点的,用ROM 空间,如果 还不够,就用nor flash了,另外还有压缩技术,这部分就要看显示效果了,

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧