大锤子 发表于 2024-9-7 22:49:32

SDCC + PIO + uC/OS, 8H8K64U, 51 站在巨人的肩膀上

SDCC + PIO + uC/OS
===8H8K64U, 51 站在巨人的肩膀上
===AI8051U-8Bit, 51 站在巨人的肩膀上
1、前言:

在论坛的RTOS板块看到各种适配51内核的RTOS或是移植,或是原创,但是大多数是基于keil的。非常的羡慕。
期间也一直在关注。终于有一天看到了令人振奋的帖子:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=9035&extra=page%3D1
其中提到了将ucos和freeRtos使用sdcc移植成功了。对于mac开发主力的我来说无疑是一件很兴奋的事情。
然而大佬使用的是eIDE这个IDE。我是用的PIO还是有些遗憾的。大佬的测试工程在eIDE中没有问题,但是无法
直接使用PIO。 因此就萌生了在PIO中也移植一下。站在巨人的肩膀上应该是可行的。
于是经过不懈的尝试终于也成功了,并且是以PIO 库的形式提供使用。

2、移植:


移植过程中遇到的问题:
问题1、先把所有的文件放在src目录下编译失败,提示:
Error: <u> undefined symbol encountered during assembly
解决:对比eIDE的执行命令发现,在编译.asm 文件时需要添加 -plosgffw 命令行参数,
但是PIO默认的构建中默认是没有的,经过对PIO的一番研究,成功解决。需要使用高级配置直接覆盖原来的命令行参数



图中红框中是原来的命令行参数




使用上图中的方式将原来的命令行选项覆盖掉;

问题2、在解决问题1后,编译成功了,但是链接的时候出现了新的问题,提示:

Multiple definition of _OSIntNesting 。。。。

解决:同样去对比eIDE的命令,不同的都改了下发现还是不行。 提示的内容就是在链接的时候发现有多余的定义。

那这些定义都出现在哪里呢?于是看了下编译生成的.asm 文件,发现是在 ucos_ii.asm 出现了很多跟其他.asm文件重复的内容。

于是看了下 ucos_ii.c 的内容,发现确实include了很多c文件, 尝试注释掉。

重新编译链接。还是有问题,但是重复的定义数量变少了。

感觉不应该这样。 然后又重新看了下eIDE 相关的配置,发现:

eIDE编译的时候仅指定了 5个源文件包括os_cpu_a.asm.

于是寻找PIO中相关的设置。 使用build_src_filter 指定需要编译的文件,重新编译链接成功;

具体方式如下:



3、测试

PIO的lib中都可以在examples目录下添加针对这个lib的使用demo。 ucos的lib我也加了一个demo。

也是使用原帖子中大佬的实验内容。只是换了个开发板。使用的是我之前参加的立创STC单片机创意活动的温湿度计;

其中有三个led灯,正好可以用来测试

原理图:







效果:


lib的使用方法可以结合demo和之前关于PIO的帖子使用。

最后工程托管在 https://gitee.com/dchuizi/stc_ucos.git


















hsrzq 发表于 2024-9-18 17:33:35

{:4_250:}可以可以,给你点个赞!

远行的鹿 发表于 2024-10-31 16:32:14

希望楼主开贴讲述完整体验教程{:5_309:}

大锤子 发表于 2024-10-31 17:41:37

远行的鹿 发表于 2024-10-31 16:32
希望楼主开贴讲述完整体验教程

目前我也只是移植成功, 应用在了我之前的一个温湿度小应用中。 暂时没有迭代了。 感兴趣可以去gitee仓库拉下来看看。

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=10208 这个帖子中有仓库地址,这里我就不贴了。 会走审核。

远行的鹿 发表于 2024-11-1 09:14:42

大锤子 发表于 2024-10-31 17:41
目前我也只是移植成功, 应用在了我之前的一个温湿度小应用中。 暂时没有迭代了。 感兴趣可以去gitee仓库 ...

感谢大佬的回复{:4_250:}
页: [1]
查看完整版本: SDCC + PIO + uC/OS, 8H8K64U, 51 站在巨人的肩膀上