硬汉嵌入式论坛

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

[RL-RTX] GCC编译RTOS2无法进入操作系统

[复制链接]

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2021-5-12 13:05:17 | 显示全部楼层 |阅读模式
CubeMX生成的makefile工程,用VScode+GCC编译,OpenOCD调试,加入RTOS2的源码后,编译成功,但是进不去任务
  1. osKernelInitialize ();
  2.         osThreadNew(&main_thread,NULL,NULL);
  3.         osKernelStart();
复制代码
调试发现osKernelStart()后会继续往下走,没有进入main_thread这个任务,osKernelStart()返回的status是ok

然后又用MDK把同样的代码导入进去,只把stm32和rots的两个.s文件从arm版换成gcc版,然后注释掉三个中断函数
  1. void SVC_Handler(void);
  2. void PendSV_Handler(void);
  3. void SysTick_Handler(void);
复制代码
(GCC如果注释这三个的话,osKernelInitialize ()时会直接跑飞)

其他代码不变,MDK编译后就顺利运行,可以进入任务,不知道什么原因

另外GCC下有调试这个系统的工具吗,OpenOCD貌似只支持FreeRTOS
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106553
QQ
发表于 2021-5-12 15:47:27 | 显示全部楼层
1、应该是没有移植好,后面我试试。
2、VisualGDB支持RTX5及其调试组件展示,用的GCC
https://visualgdb.com/tutorials/arm/keil/rtx/
11-thread2.png
回复

使用道具 举报

41

主题

214

回帖

337

积分

高级会员

积分
337
发表于 2021-5-12 20:32:02 | 显示全部楼层
能看到栈信息吗?单步看,是到了那一步飞的?然后看下是什么fault类型。
回复

使用道具 举报

6

主题

636

回帖

654

积分

金牌会员

积分
654
QQ
发表于 2021-5-12 21:05:34 | 显示全部楼层
eric2013 发表于 2021-5-12 15:47
1、应该是没有移植好,后面我试试。
2、VisualGDB支持RTX5及其调试组件展示,用的GCC
https://visualgdb. ...

大佬啥时候讲讲怎么搭建VSC+GCC平台,开发调试STM32啊
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-5-12 23:33:01 | 显示全部楼层
eric2013 发表于 2021-5-12 15:47
1、应该是没有移植好,后面我试试。
2、VisualGDB支持RTX5及其调试组件展示,用的GCC
https://visualgdb. ...

感谢回复,同样的代码,用MDK就可以进任务,用GCC就进不去。不知道是不是漏掉了什么宏定义。

我直接把工程放上来了,stm32f411,就是cubeMX生成的,很简单,可以直接make,但在osKernelStart()之后没有并进入任务,而是继续向下。

用MDK的话,需要在stm32f4xx_it.c里去掉SVC,Systick,PendSV这三个中断函数,不然会冲突,然后把stm32和rtos的两个.s文件从GCC换成ARM的,其余代码不变,就可以直接编译,顺利运行,正常进入任务。

附件好像发不上来,发网盘吧
链接:https://pan.baidu.com/s/1RZq1gFhOjH69B3lR0YFcag
提取码:tc57

回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-5-12 23:42:51 | 显示全部楼层
snakeemail 发表于 2021-5-12 20:32
能看到栈信息吗?单步看,是到了那一步飞的?然后看下是什么fault类型。

在MDK里SVC_Handler() PendSV_Handler()  SysTick_Handler()这三个会和RTOS冲突,得去掉

GCC里如果没有这三个函数,就会跑飞

最后一步是在这里,然后就进入无限循环


屏幕截图 2021-05-12 231043.png

屏幕截图 2021-05-12 230641.png

加上就可以正常跑了,但还是进不去任务


回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-5-12 23:46:30 | 显示全部楼层
yklstudent 发表于 2021-5-12 21:05
大佬啥时候讲讲怎么搭建VSC+GCC平台,开发调试STM32啊

其实很简单,装个arm-none-eabi-gcc,再装个mingw就可以编译了,要调试的话装个openocd,不用再装别的。
工程我上面已经发了,可以直接make。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106553
QQ
发表于 2021-5-13 09:10:15 | 显示全部楼层
carvenl 发表于 2021-5-12 23:33
感谢回复,同样的代码,用MDK就可以进任务,用GCC就进不去。不知道是不是漏掉了什么宏定义。

我直接把 ...

回头我在Embedded Studio的GCC上试试。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2021-5-29 10:38:56 | 显示全部楼层
问题找到了,用make编译irq_cm4f.S时需要加上以下参数,否则不会编译这个文件
-x assembler-with-cpp
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-11-28 14:35:13 | 显示全部楼层
楼主,可不可以再提供下工程源码,上面的连接失效了! 谢谢 79166877@qq.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 18:38 , Processed in 0.282594 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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