找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6085|回复: 5
收起左侧

STC单片机uCOS-II移植教程

  [复制链接]
ID:555185 发表于 2020-2-12 12:44 | 显示全部楼层 |阅读模式
前言
       其实关于uCOS-II的51单片机移植教程和例子网上已经有很多了,但是大部分都是基于Proteus仿真外扩内存的,下载之后也不能直接在硬件上使用,也没有具体的移植教程。这对于一个想学习操作系统而又无从下手小白的来说简直就是噩梦。
       由于51内核的特殊性和keil编译器原因(51的系统堆栈指针和Keil编译后仿真堆栈指针增长的方向是相反的)带来移植的困难。网上的例程处理堆栈的方式有两种(至于不太懂的同学可以移步看看这篇帖子)https://blog.csdn.net/s111sw/article/details/6012720,一种是用小模式Small,另外一种是大模式Large。Small模式是把系统堆栈数据和仿真堆栈数据一起复制到用户堆栈XDATA区,这种方式编译代码小但是任务切换速度慢。而Large模式在编译的时候Keil默认是把仿真堆栈数据设置在XDATA区,所以在任务切换的时候只需要把系统堆栈和仿真堆栈的当前地址保存到用户堆栈就行,这样的方式编译代码大但任务切换速度快(现在都是用这种方式,STC12C5A60S2在22.1184MHz晶振下任务切换时间37us)。可是,前面已经说了51的系统堆栈指针是向上增长的,而Keil编译的仿真指针是向下增长的,这就导致了一个 问题---uCOS操作系统的堆栈检测函数OSTaskStkChk没办法使用。上面链接帖子里面用的方法是修改uCOS的内核函数实现堆栈检测功能的。正是因为我不想修改内核函数的原因所以才有了我现在移植的uCOS的版本。
                                                                                                                                                                                                          1.png
图1

虽然51的系统堆栈指针只能向上增长,但是在代码里面我们可以人为的把里面的数据按照自己的意愿存放到用户堆栈里。下面是我移植的堆栈结构,把系统堆栈增长方向和仿真堆栈统一起来就可以实现堆栈连续存放数据了。
                                                                                                                                                                                                          2.png
                                                                                                                   图2
开始移植
准备工具
1、    电脑一台(废话!)
2、    Keil4
3、    下载配套的代码一份,我移植的是比较经典的版本uCOS-II 2.52

51_uCOS-II V2.52.zip (376.83 KB, 下载次数: 96)

评分

参与人数 3黑币 +60 收起 理由
zmc419 + 5 很给力!
admin + 50 共享资料的黑币奖励!
muzhi + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:108624 发表于 2021-2-8 15:47 | 显示全部楼层
写的不错! 值得一试!
回复

使用道具 举报

ID:677393 发表于 2021-2-9 10:20 | 显示全部楼层
哥太牛了,51能上系统
回复

使用道具 举报

ID:108624 发表于 2021-2-28 16:03 | 显示全部楼层
最近又测试了一下。非常好。发挥了STC的大XDATA. 值得一用!!!!!!!!
回复

使用道具 举报

ID:576482 发表于 2022-11-8 10:14 | 显示全部楼层
哪天吃多了没事干的时候研究研究!!!
回复

使用道具 举报

ID:983641 发表于 2022-11-9 21:25 | 显示全部楼层
太强大了。。。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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