在前两个礼拜TouchGFX更新了4.13版,版本的改动比较大,网上的教程都还只是停留在早期的版本,早期的移植教程已经不适应于现在版本,这给晚入门的朋友们在移植上带来很大的不便,所以在第二章介绍了新版本的移植。
几个月使用touchgfx开发的过程中,遇到了使用keil编译与下载太慢,HAL库的德行就这样,加上大量图片文字资源放在W25Q中,进一步减慢了下载速度,所以在此提出一种开发思路:使用前后端分离的思想,建立中间件连接UI与系统,这样UI相关的程序用VS开发并在电脑仿真,MCU端只要把接口实现,就可以直接运行做好的UI了,如果你有不一样的开发思路,欢迎一起探讨。
RT-Thread在调试上具有一定的优势,所以最后介绍下如何把现有的工程移植到RT-Thread系统中,此部分参考了@天狼八部 的教程,针对新版本的改变略加修改。
2.1.1 安装好CubeMX与TouchGFX Designer
注:我这里是拷贝以前版本生成的代码。因为在以前版本SDRAM必须开启才能使用touchgfx,但现在版本不是必要的了,屏幕小点使用片内RAM都可以,所以cubemx就不给你生成了。
这个网上的教程很多,在此就不重复说明
参考网址:https://blog.csdn.net/Ningjianwen/article/details/100151158
虽然touchgfx的代码与系统的耦合度不是很高,但随着程序的开发,如果不用中间件来解耦合,会使touchgfx的可移植性大大降低,也不利于代码的分享。
举个例子,很多人开发touchgfx的界面时,直接调用的MCU的一些代码,比如HAL库的代码,这样在使用VS仿真的时候就会报错,只能下载到单片机上调试,这样的效率是很低的,而且将这样的代码分享给别人,别人得把你在touchgfx调用的MCU的代码改成适用自己硬件的代码,工程一大就很难去寻找修改。
中间件实现很简单,示意图如下:
创建两个.c文件一个.h文件做为中间件,.h文件中touchgfx与系统的交互接口,再根据平台的不同在对应.c文件中实现接口的功能。
这样做有几个好处:
我以贪吃蛇的工程为例
总结一下,在 MDK 编写的程序我只是把.c 文件修改好,而 touchgfx 的程序都没有去
动,这样就可以少了很多编译下载调试的时间,也方便移植到不同硬件平台上去。
贪吃蛇的程序其实是用 TouchGFX Designer 建的 PC 工程,调好后再移到 cubemx 创的MDK 工程中的。这里介绍下如何移植他人的 touchgfx 工程到自己创建的工程下的方法与注意事项。
将 /board/CubeMX_Config/Src/main.cpp 中的 SystemClock_Config 函数复制并替换
/board/board.c 中的同名函数。
修改/board/board.h 中的参数为实际值。
/board/linker_scripts/link.sct 修改如下。根据不同单片机的 flash 和 ram 大小进行正确
配置。
Board/CubeMX_Config/Inc/main.h中,void Error_Handler(void)函数的定义与RT-Thread
中同名函数定义有冲突,做如下修改。
注意:在使用 CubeMX 修改配置并重新生成代码后,该文件需要重新修改。
RT-Thread Kernel -> Memory Management 进行如下配置。这两个配置会将 SDRAM 通
过 RT-Thread 管理起来,可动态分配 SDRAM 中的内存。
在 Hardware Dervers Config 中 开 启 TouchGFX 。 开 启 后 Onboard Peripheral
Dervers->Enable SDRAM 将自动开启。
在 ENV 中通过 scons --target=mdk5 命令生成工程,并打开。编译下载即可正常运行。
注意:在 TouchGFX Designer 修改界面后,最好是重新生成一次工程。(增删了界面,
使用和修改了图片都会生成新文件或删除旧文件,这时候就需要重新生成工程,其他时
候不需要。为保险起见,建议修改了界面后重新生成一次。)
注:如果编译报上百个错,里面有“_assert”,请把优化等级调成 L3。
赶在春节放假前完成了这篇教程的原稿,可能会有所欠缺,如果你在操作过程中遇到 bug,请在 Q群中讨论 625183657
因为疫情的原因,电脑扔公司,所以拖到现在才发到博客上。
在用 vs 编写界面时遇到一些坑
1、vs 的结构体赋值可以直接={值 1,值 2};,但 keil 不行,所以需要申明带具体名称的结构体变量才能用。
2、touchgfx 不支持任何动态内存分配,现有版本是这样,所以我调用 c++的 vecto 在电脑仿真时没问题,一到单片机上就不行了。
链接: https://pan.baidu.com/s/11tq84gHar0j1srMYzNYccQ
提取码: 37wc
工程对应的硬件是正点原子的阿波罗 767 开发板+7 寸 800*480RGB 液晶屏