OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4293|回复: 5

IAR编译器移植STemWin到STM32F407上,在GUI_Init出现Hard_Fault

[复制链接]

4

主题

16

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-8-29
在线时间
12 小时
发表于 2016-11-4 19:41:31 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 GolDHu 于 2016-11-4 19:48 编辑

[qq]812017077[/qq]
最近尝试在STM32F407上移植STemWin,过程中遇到了不少的困惑,求指点。
    因为团队中大伙使用的都是IAR编译器们,所以我尝试使用IAR编译器移植STemWIn,不过原子这边都是Keil的教程,只能自己揣摩着来。
    以下是在移植过程中遇到的一些情况。


     根据EMWIN的开发手册,需要在ST官网上下载STM32F4xx的标准外设和DSP库,不过下载的库是最新的。下载过来发现与我原来的有不少的不同之处,比如新增加了许多的GPIO组等。不过我对比了一下出了新增了一些东西,剩下的则区别不大,于是我便没有使用最新的,而是直接拿过来原来的使用了。

[mw_shl_code=c,true]/* FPU settings ------------------------------------------------*/
  #if(__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ( (3UL << 10 * 2) | (3UL << 11 * 2) ) ; /*set CP10 and CP11 Full Access*/
  #endif
  /* Reset the RCC clock configuration to the default reset state ------------*/[/mw_shl_code]
   如上, 手册上说,要使用FPU运算,根据SystemInit函数开头一段这一段内容,需要加入几个宏定义,不过我查看了一下我的这个函数,并没有和照片中一样的这一段判断内容。我上网上查了一下,说是没有的需要自己加上这一段,便自己手动加了进去,然后在IAR编译器中找到添加宏定义的地方,加上了__FPU_PRESENT=0  __FPU_USED=0 ARM_MATH_CM4  __ICCARM__(原来我按照手册用的__CC_ARM 发现会报错,问了一下说是IAR用这个__ICCARM__,不过实际上我在我原来的arm_math.h文件中并没有看到与之相关的一段内容)。完了以后我添加了libarm_cortexM4lf_math.a个库(手册上也有说明,IAR用这个)。我突然觉得这个库配套我原来的arm_math.h估计不能用。预示我就用最新的arm_math.h的文件替换了我原来的。

之后我从网上找来了STemWIn的源码(其实想用原子例程里的,不过例程中没有IAR能用的库),按照手册上说明的进行了一些配置。
这里有一点需要说明的是,我移植过来了例程中的malloc文件,但是我没有外部sram。所以去掉了外设以及ccm。剩下的基本就是按照手册进行的无操作系统的移植。不过最后编译的时候报了错。说了一下空间不足。我没办法,就把malloc里面定义的那个内部sram的空间缩小了一倍。这个时候终于编译可以了。但是在GUI_Init的时候,直接跳到了Hard_Fault()里面。不知道是发生了什么。

可能是我之前移植有问题。又或者怎样。求人指点!!(在没有移植界面之前LCD是可用的。)@zuozhongkai
[img]file:///C:\Users\Gold\AppData\Roaming\Tencent\Users\812017077\QQ\WinTemp\RichOle\DTC5$JHOMLE][AI8TMNVE0T.png[/img]

上面说要使用FPU运算,根据这个函数中的这一段说明,取药加几个宏定义

上面说要使用FPU运算,根据这个函数中的这一段说明,取药加几个宏定义

最佳答案

查看完整内容[请看2#楼]

刚刚[mw_shl_code=c,true]// // Set display driver and color conversion pDevice = GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0); // // Display driver configuration, required for Lin-driver // LCD_SetSizeEx (0, t_lcddev.width , t_lcddev.height); LCD_SetVSizeEx(0, t_lcddev.width , t_lcddev.height);[/mw_shl_code]看了一下 是在GUI_DEVICE_CreateAndLink个函数死掉的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-8-29
在线时间
12 小时
 楼主| 发表于 2016-11-4 19:41:32 | 显示全部楼层
刚刚[mw_shl_code=c,true]//
  // Set display driver and color conversion
  pDevice = GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_565, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, t_lcddev.width , t_lcddev.height);
  LCD_SetVSizeEx(0, t_lcddev.width , t_lcddev.height);[/mw_shl_code]看了一下 是在GUI_DEVICE_CreateAndLink个函数死掉的
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-8-29
在线时间
12 小时
 楼主| 发表于 2016-11-4 21:38:21 | 显示全部楼层
找到问题了,之前用的系统的malloc而没有用自己的malloc。估计分配内存出错了
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-8-29
在线时间
12 小时
 楼主| 发表于 2016-11-5 12:04:41 | 显示全部楼层
已解决
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-11-17
在线时间
6 小时
发表于 2016-11-18 16:10:43 | 显示全部楼层
求指导 怎么解决的 我也是在这里进入HardFault_Handler,用系统的malloc不行吗
回复

使用道具 举报

4

主题

16

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-8-29
在线时间
12 小时
 楼主| 发表于 2016-11-24 22:50:01 | 显示全部楼层
suxuan0817 发表于 2016-11-18 16:10
求指导 怎么解决的 我也是在这里进入HardFault_Handler,用系统的malloc不行吗

恩 系统的不行。 换成原子的就好了 。两种malloc的实现不太一样。系统的malloc估计一次取不到大量的空间。所以一开始就NULL。后面就不是说了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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