硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1027|回复: 14
收起左侧

[ThreadX全家桶] 关于STM32F469i-Discovery移植ThreadX+GUIX遇到的问题

[复制链接]

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2022-8-25 14:27:11 | 显示全部楼层 |阅读模式
本人最近在跟着硬汉大哥的教程学习ThreadX和GUIX,在移植过程中遇到了一些问题,希望硬汉大哥和各位大佬帮忙看看还能不能救~

开发环境版本如下:
CLion-2021.3.4
STM32CubeMX-6.6.1
ThreadX-6.0.2
GUIX-6.0.1
GUN-Tools-ARM-Embedded_2020q4
OpenOCD-0.11.0


开发板:STM32F469I-Discovery

显示屏驱动用的STM32F469的DSI接口,屏幕分辨率800*480.
SDRAM:32Bit-16MByte

环境是用的CLion创建STM32CubeMX工程,然后在STM32CubeMX中进行基本配置,生成STM32CubeIDE工程在Clion中进行编译。

(至于为什么要用CLion呢,开始我也质疑这玩意能用么,但是用上了之后真香!!!回不去了)
图片.png


说下目前的情况和遇到的问题:
1、当前ThreadX移植应该没有问题,参照硬汉大哥的V6的教程和gcc工程中的文件,FPU在CMake中已经开启,并且测试浮点运算正常,创建任务和任务统计也都正常;
2、当移植GUIX的时候,创建MainTask任务,启动GUIX之后,就会进入到startup_stm32f469nihx.s中的b Infinite_Loop中,此部分代码是用的硬汉大哥教程中的,部分代码如下:
[C] 纯文本查看 复制代码
void MainTask(void) 
{
	/*初始化配置 */
	gx_initconfig();

	/* 配置显示屏 */
    gx_studio_display_configure(DISPLAY_1, stm32f4_graphics_driver_setup_24xrgb,
        LANGUAGE_CHINESE, DISPLAY_1_THEME_1, &root);

    /* 创建窗口 */
    gx_studio_named_widget_create("window", (GX_WIDGET *)root, (GX_WIDGET **)&pScreen);

	/* 显示根窗口 */
    gx_widget_show(root);

    /* 启动GUIX */
    gx_system_start();

	while(1)
	{
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
//        HAL_Delay(100);
		tx_thread_sleep(100);
	}
}

3、奇怪的事情发生了,(为什么我会在while(1)中注释了HAL_Delay(100)呢?后面说),当我进行Debug调试的时候,看程序是为什么Infinite_Loop,结果发现是没有定义WWDG_IRQHandler,在stm32f4xx_it.c中添加空的WWDG_IRQHandler中断处理函数后,调试时候依然会进入Infinite_Loop,进入的位置又变成了其他没有实现的中断处理函数,我就蒙了,实际的硬件中并没有使用到这些硬件和硬件的中断处理函数,为什么会跳转到这里呢?没有解决,请各位大佬帮忙看看这里。
4、更奇怪的事情也发生了,上面说为什么在while(1)中注释了HAL_Delay(100)?注释掉tx_thread_sleep(100);,改用HAL_Delay(100),程序竟然奇迹般的运行起来了,也不再进入Infinite_Loop,(虽然此时GUIX是否正常工作起来未知,因为DSI和LTDC配置上好像还有些问题,显示屏还无法显示),HAL的时基用的TIM2实现的。不知ThreadX的tx_thread_sleep为什么会有这样的问题,没有GUIX的时候是正常的,加入GUIX后在MainTask中初始化GUIX后,调用tx_thread_sleep程序就会进入Infinite_Loop,请各位大佬看看这里如何拯救?


最后放上我的完整的工程,以供参考。


STM32F469_BASE_DSI_ThreadX_V6_GUIX_V6.zip

3.72 MB, 下载次数: 14

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-8-25 15:28:06 | 显示全部楼层
刚刚关闭了GX_CHROMEART_ENABLE,程序运行正常了,不会因为使用tx_thread_sleep而进入Infinite_Loop了,那么我猜想,问题出在了DMA2D上,我接着再寻找下问题所在。
回复

使用道具 举报

13

主题

194

回帖

233

积分

高级会员

积分
233
发表于 2022-8-25 15:53:55 | 显示全部楼层
说的我只对Clion感兴趣了,不知道能不能加上google test做单元测试
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-8-26 08:33:42 | 显示全部楼层
zhang0352505 发表于 2022-8-25 15:53
说的我只对Clion感兴趣了,不知道能不能加上google test做单元测试

应该是没问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
发表于 2022-8-26 10:47:45 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

1

主题

53

回帖

56

积分

初级会员

积分
56
发表于 2022-8-26 11:53:20 | 显示全部楼层
clion 工程编不过,cmake 中头文件依赖、目标依赖还有问题。
回复

使用道具 举报

1

主题

53

回帖

56

积分

初级会员

积分
56
发表于 2022-8-26 15:14:30 | 显示全部楼层
几经修改,工程编译通过,调试缺少了配置文件,楼主你看看

Board config file 找不到

图片.png
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-8-26 15:58:49 | 显示全部楼层
CoderXMan 发表于 2022-8-26 11:53
clion 工程编不过,cmake 中头文件依赖、目标依赖还有问题。

需要配置minGW,arm-eabi-none-等这些环境
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-8-26 16:02:24 | 显示全部楼层

硬汉大哥,这个DMA2D这就是过不去了,现在在gx_display_driver_stm32f4_24xrgb.c中把#define GX_CHROMEART_ENABLE 关掉,显示都正常了,触摸也移植成功了,但是只要开启DMA2D,程序就进入问题中的那个无限循环,DMA2D开启后还需要有其他处理的地方么?望帮忙解答哈
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
发表于 2022-8-27 01:23:51 | 显示全部楼层
tomcaty 发表于 2022-8-26 16:02
硬汉大哥,这个DMA2D这就是过不去了,现在在gx_display_driver_stm32f4_24xrgb.c中把#define GX_CHROM ...

最关键一条,DMA2D时钟是不是没有开,移植的时候最容易在这个地方出错。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-9-1 07:36:44 | 显示全部楼层
eric2013 发表于 2022-8-27 01:23
最关键一条,DMA2D时钟是不是没有开,移植的时候最容易在这个地方出错。

__HAL_RCC_DMA2D_CLK_ENABLE();这个在LCD初始化时候已经开启了,这几天忙别的事儿了,这个还没有任何进展
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-9-1 07:38:31 | 显示全部楼层
CoderXMan 发表于 2022-8-26 15:14
几经修改,工程编译通过,调试缺少了配置文件,楼主你看看

Board config file 找不到

这个boardconfig是在openOCD的 “scripts\board\”目录下,你到你自己的openocd目录下重新找一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107585
QQ
发表于 2022-9-2 11:32:32 | 显示全部楼层
tomcaty 发表于 2022-9-1 07:36
__HAL_RCC_DMA2D_CLK_ENABLE();这个在LCD初始化时候已经开启了,这几天忙别的事儿了,这个还没有任何进展 ...

通过这个宏定义开启了好几个API加速重定向,可以逐步排查是那个加速倒腾的。
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2022-9-6 08:48:40 | 显示全部楼层
eric2013 发表于 2022-9-2 11:32
通过这个宏定义开启了好几个API加速重定向,可以逐步排查是那个加速倒腾的。

嗯嗯,得需要点时间来排查了,感谢硬汉大哥指点
回复

使用道具 举报

7

主题

190

回帖

216

积分

高级会员

积分
216
发表于 2022-11-23 00:19:30 | 显示全部楼层
楼主有clion的配置教程嘛
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-7 07:57 , Processed in 0.216913 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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