硬汉嵌入式论坛

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

[ThreadX全家桶] 实时操作系统能否用于 Cortex-A 内核的芯片

  [复制链接]

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2022-6-30 23:23:07 | 显示全部楼层 |阅读模式
如题,最近公司想搞一个硬件通用平台,采用 Cortex-A55 内核的芯片,做两套系统,一套 linux ,一套 RTOS。

RTOS 可以是 ThreadX,Free RTOS 等。

想问下大佬们,RTOS 能移植到 A 内核吗?有没有相关的资料,教程,例程等


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-1 00:07:08 | 显示全部楼层
没问题,所有的A系都支持。

https://github.com/azure-rtos/threadx/tree/master/ports
image.png
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-4 14:25:00 | 显示全部楼层
eric2013 发表于 2022-7-1 00:07
没问题,所有的A系都支持。

https://github.com/azure-rtos/threadx/tree/master/ports

  多谢大佬,我先搞个开发板试试
回复

使用道具 举报

19

主题

62

回帖

119

积分

初级会员

积分
119
发表于 2022-7-7 22:25:03 | 显示全部楼层
所有外设的驱动还要自己写,一般厂家都没有提供相关资料,这个才是比较大的问题
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-7 23:17:40 | 显示全部楼层
mojinpan 发表于 2022-7-7 22:25
所有外设的驱动还要自己写,一般厂家都没有提供相关资料,这个才是比较大的问题

不用自己写,全家桶全套驱动都提供了。
回复

使用道具 举报

19

主题

62

回帖

119

积分

初级会员

积分
119
发表于 2022-7-9 10:06:00 | 显示全部楼层
eric2013 发表于 2022-7-7 23:17
不用自己写,全家桶全套驱动都提供了。

没那么强吧,常用的ADC,SPI什么之类外设驱动还是要自己写的吧?比如ZYNQ,除了xilinx外还有谁提供这个芯片的外设驱动呀?有全家桶嘛?如果有就太好了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-9 15:55:54 | 显示全部楼层
mojinpan 发表于 2022-7-9 10:06
没那么强吧,常用的ADC,SPI什么之类外设驱动还是要自己写的吧?比如ZYNQ,除了xilinx外还有谁提供这个芯片的 ...

这种的跟全家桶的关系就不大了。

RTOS全家桶做的就是本身所有组件所涉及到的所有驱动实现。这已经足够了,而ADC,SPI这种都是简单的外设,需要IC厂家来提供的,厂家肯定要提供一个基础驱动的,否则客户都没法测试芯片是否正常。
全家桶没必要把本该属于IC厂家自己该做的外设驱动库,也揽到自己的工作范围内。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-14 13:50:01 | 显示全部楼层
eric2013 发表于 2022-7-1 00:07
没问题,所有的A系都支持。

https://github.com/azure-rtos/threadx/tree/master/ports

我这边搞了个开发板,linux 下的交叉编译环境也弄好了,然后照着例程写了个点灯的汇编和 c,编译链接都没问题。。。

然后开始上 threadx,找到 port/cortex_a7/gnu ,写了个makefile 把 example 和 系统内核代码编译链接,编译没问题,链接提示有几个函数未定义。。。

然后makefile里只保留 crt0.S 再自己写一个 main.c ,啥也不干。
crt0.S 主要是搭建 C 运行环境, main.c 提供 main 函数,防止出现 main 未定义。
这时候编译没问题,链接会报错
arm-linux-gnueabihf-ld -Timx6ul.lds -o imx6ull.elf -lgcc_eh -L /home/chengxiaohu/arm-gcc/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/7.5.0 crt0.o main.o
crt0.o: In function `start':
(.text+0x24): undefined reference to `memset'
crt0.o: In function `start':
(.text+0x34): undefined reference to `exit'
make: *** [Makefile:18:imx6ull.bin] 错误 1


crt0.S 里面确实用到了 memset 和 exit 这两个函数,这两个函数应该是库函数,不需要用户定义才对啊。  链接参数里也包含了编译器的库路径。

693EF31B-94BC-49bc-9A9C-2B90901EA6EE.png

网上搜了说是增加链接库参数,设置其他连接参数等都试过了,一直没解决。。

请问大佬知道原因吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-14 14:42:53 | 显示全部楼层
ihavedone 发表于 2022-7-14 13:50
我这边搞了个开发板,linux 下的交叉编译环境也弄好了,然后照着例程写了个点灯的汇编和 c,编译链接都没 ...

imx6吗,这个论坛坛友有分享,找下,一般开源c库都是用的newlib,不过还是用IAR更简单,imx8都可以用iar。

另外imx6跑不跑rtos好像意义不大,算力还没有M7强。
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-14 16:42:20 | 显示全部楼层
eric2013 发表于 2022-7-14 14:42
imx6吗,这个论坛坛友有分享,找下,一般开源c库都是用的newlib,不过还是用IAR更简单,imx8都可以用iar ...

这边是想用一个支持 Linux 的芯片,现在是跑 rtos ,后面会在这同一个平台上跑 linux。  一块板子,两种应用场合。 这个板子专门做逻辑控制用,对算力没要求。

我这边也是为了 linux 做准备,所以没有用 iar,直接用的 gnu。

但是我这边用 gnu 的 port 文件链接一直有问题,也不知道具体原因。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-14 17:17:25 | 显示全部楼层
ihavedone 发表于 2022-7-14 16:42
这边是想用一个支持 Linux 的芯片,现在是跑 rtos ,后面会在这同一个平台上跑 linux。  一块板子,两种 ...

linux下开发的话,现在超级多的选择。
1、你这个属于纯裸添加了,得添加开源C库才可以玩,树莓派单片机就是这么个开发方式,所有东西都要自己添加。跟开发树莓派MPU没区别了。。。
2、IAR有linux版,所以不应担心开发环境问题。
3、embedded studio也没问题,这个我们做了,用的gcc的port文件,直接添加使用的。所有平台都支持。
4、ads也行,不是古老的那个ads,是ARM新出的ads,所有A核都支持,通用跨平台
5、用的imx6的,用NXP的那个eclipse应该也可以开发的,ZYNQ A9就是用的他们家的eclipse + gcc方案,通用跨平台。

回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-15 17:08:04 | 显示全部楼层
eric2013 发表于 2022-7-14 17:17
linux下开发的话,现在超级多的选择。
1、你这个属于纯裸添加了,得添加开源C库才可以玩,树莓派单片机 ...

"1、你这个属于纯裸添加了,得添加开源C库才可以玩,"

纯裸添加需要自己在工程中提供 C 库源码吗?  交叉工具链中没有现成的标准 C 静态库?  
比如 MDK、IAR等都有它自己的 C 库,linux 下的交叉工具链没有这个库?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2022-7-15 17:30:43 | 显示全部楼层
ihavedone 发表于 2022-7-15 17:08
"1、你这个属于纯裸添加了,得添加开源C库才可以玩,"

纯裸添加需要自己在工程中提供 C 库源码吗?   ...

MDK, IAR等,这个是商用IDE,C库不开源的。

newlib是开源免费的,随便用。
The Newlib Homepage (sourceware.org)
回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-20 00:10:04 | 显示全部楼层
eric2013 发表于 2022-7-15 17:30
MDK, IAR等,这个是商用IDE,C库不开源的。

newlib是开源免费的,随便用。

现在程序编译通过,定时器中断也运行起来了(在定时器中断里加了闪灯)。然后新建了任务,任务里响蜂鸣器,结果不响。

经过查找,发现下面的位置有问题
83BEDE24-9EED-4863-B855-C686FF0081C9.png

因为我这个板子没有jlink 仿真接口,所以只能采用其他办法调试,很麻烦。
我在图中说明的两个位置分别加蜂鸣器测试函数,循环内是可以响的,循环后面就不响。
说明一直就没有走到循环后面来。

大佬有啥解决方向上的建议吗?



回复

使用道具 举报

58

主题

267

回帖

446

积分

高级会员

积分
446
 楼主| 发表于 2022-7-20 11:39:03 | 显示全部楼层
ihavedone 发表于 2022-7-20 00:10
现在程序编译通过,定时器中断也运行起来了(在定时器中断里加了闪灯)。然后新建了任务,任务里响蜂鸣器 ...

经过调试,发现是因为任务没有创建成功,所以调度器一直死循环。

83BEDE24-9EED-4863-B855-C686FF0081C9.png

进入系统时,会调用 tx_application_define 函数来创建任务,调用这个函数之前把 _tx_thread_system_state 变量赋值成了 TX_INITIALIZE_IN_PROGRESS
后面创建任务时检查 _tx_thread_system_state  的值,结果竟然进去了那个 if,报错。  导致创建任务失败。。。

这个值莫名其妙地被改变了。  
回复

使用道具 举报

54

主题

145

回帖

307

积分

高级会员

积分
307
发表于 2022-7-26 09:48:02 | 显示全部楼层
这个上面的RTOS多核怎么调度的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 22:47 , Processed in 0.254461 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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