野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11883|回复: 12

touchGFX的移植

[复制链接]
发表于 2019-5-5 21:53:59 | 显示全部楼层 |阅读模式
     我在野火的429板子上移植touchGFX为429 discovery生成的touchGFX,编译成功后调试时,程序运行到hal.initialize()便发生了hard fault,不知道这个函数到底干了什么,有大神玩儿明白了吗?网上查不到
回复

使用道具 举报

发表于 2019-5-7 08:50:03 | 显示全部楼层
帮顶
回复

使用道具 举报

发表于 2019-5-7 15:43:42 | 显示全部楼层
帮顶。。。。。。。。。。。
回复

使用道具 举报

 楼主| 发表于 2019-5-7 20:44:29 | 显示全部楼层
fire哥该多研究下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 20:59:53 | 显示全部楼层
本帖最后由 LiuMC 于 2019-5-14 21:05 编辑

        问题解决了。我开发环境使用truestudio。
        在启动文件startup_stm32f429xx.s中,以前发现Reset_Handler函数中有一句bl __libc_init_array,不知道干什么就注释了,当时跑程序也没发现什么问题,这下问题就出来了。把该句注释取消后编译下载便没有问题了。
        对于hal.initialize(),调试时通过反汇编窗口看到,
      96               hal.initialize();         
080125d2:   ldr     r0, [r7, #20]
080125d4:   bl      0x8015b74 <_ZN8touchgfx3HAL10initializeEv>    ;调用_ZN8touchgfx3HAL10initializeEv

_ZN8touchgfx3HAL10initializeEv:
08015b75:   push    {r4, lr}
08015b77:   mov     r4, r0
08015b79:   bl      0x8012bdc <touchgfx::OSWrappers::initialize()>  ;调用OSWrappers::initialize(),创建同步信号量
08015b7d:   ldr     r0, [r4, #4]   ;r4=0x2000d43c,是hal实例的引用。执行后r0=0x2000d2f0,是dma实例地址
08015b7f:   ldr     r3, [r0, #0]
08015b81:   ldr     r3, [r3, #12]
08015b83:   blx     r3   ;调用dma.initialize(),初始化DMA2D
08015b85:   ldr     r0, [r4, #12]
08015b87:   ldr     r3, [r0, #0]
08015b89:   ldr     r3, [r3, #8]
08015b8b:   blx     r3 ;调用tc.init(),初始化触摸控制
08015b8d:   ldr     r3, [r4, #0]
08015b8f:   mov     r0, r4
08015b91:   ldr     r3, [r3, #96]   ; 0x60
08015b93:   ldmia.w sp!, {r4, lr}
08015b97:   bx      r3 ;调用hal.configureInterrupts(),配置中断
回复 支持 反对

使用道具 举报

发表于 2019-5-14 23:23:42 | 显示全部楼层
LiuMC 发表于 2019-5-14 20:59
问题解决了。我开发环境使用truestudio。
        在启动文件startup_stm32f429xx.s中,以前发现R ...

漂亮            
回复 支持 反对

使用道具 举报

发表于 2019-5-14 23:23:48 | 显示全部楼层
LiuMC 发表于 2019-5-7 20:44
fire哥该多研究下

好的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-17 10:42:42 | 显示全部楼层
本帖最后由 LiuMC 于 2019-5-17 22:13 编辑

ST上跑STemWin的时候,片上的CRC时钟必须打开。
在touchGFX的资料上没有注意到哪儿说要打开CRC,在使用touchGFX创建stm32f429 discovery的应用的时候也没有看到CRC时钟的那一句代码在哪儿。但是如果CRC没有开,会导致hardfault。
使用STM32CubeMX创建project的时候,必须要激活CRC后才能选择touchGFX或emWin的,生成的代码中也有打开CRC的语句。调试时,发现在touchgfx_generic_init()中调用FontManager::setFontProvider(&fontProvider)或FrontendHeap& heap = FrontendHeap::getInstance()有个CRC LOCK的检查,这段汇编没仔细去看了,反正没有CRC不行。
回复 支持 反对

使用道具 举报

发表于 2019-7-24 13:31:06 | 显示全部楼层

火哥的移植有了嘛~~~
回复 支持 反对

使用道具 举报

发表于 2019-7-24 13:42:31 | 显示全部楼层
楼主方便上传一个移植模板嘛~~~~
回复 支持 反对

使用道具 举报

发表于 2019-7-26 08:40:54 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2019-7-26 13:33:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-13 20:02:15 | 显示全部楼层
Aladdin_Wang 发表于 2019-7-26 13:33
https://blog.csdn.net/sinat_31039061/article/details/96474184

我也已经成了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-25 18:58 , Processed in 0.030765 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表