蹄牛操作系统TINIUX在MCS-51单片机上的移植开发-STC8

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

 蹄牛操作系统TINIUX在MCS‐51单片机上的移植开发 ——使用STC8A8K64S4A12芯片 1. 概述 蹄牛操作系统TINIUX是一个源代码开放的、易于移植的、面向嵌入式应用的实时操作系统(RTOS),具有轻量级、低功耗、启动快、可裁剪、可分散加载等优点。主要应用领域为工业控制,智能传感器开发,智能终端,物联网,机器人等。  TINIUX遵循MIT开源许可协议,可以免费在商业产品中使用,不需要公布应用源码,没有任何潜在商业风险。  目前在Github上已开源的TINIUX源码已适配好MCS‐51系列下的8051与8052芯片架构,官方网站上()提供了不同芯片类型在Code::Blocks等平台上的示例工程,如果您使用的芯片(开发板)未在其中,可以参照本文档从零开始创建自己的开发工程,并验证移植的结果。  2 环境准备 基于TINIUX开发前,我们首先需要准备好单板运行的环境,包括软件环境和硬件环境。    硬件环境: 所需硬件 描述 开发板 基于MCS‐51系列下的8051或8052芯片架构的开发板。 PC机 用于编译、加载并调试镜像。 电源 开发板供电。        软件环境: 软件 描述 Window 7操作系统 安装Code::Blocks,SDCC和相关调试驱动的操作系统。 Code::Blocks(17.12以上版本) C/C++语言的软件集成开发环境,便于软件工程化开发与管理。 SDCC(3.6以上版本) 用于编译、链接并生成目标芯片上的可执行文件。        说明  Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境。 Code::Blocks是开放源码软件,由纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets版。 下载网址: 一般使用选择binary release 版本即可,推荐下载codeblocks‐17.12mingw‐setup.exe安装包。  SDCC(Small Device C Compiler)是一个优化的 ANSI ‐ C交叉编译器,目标CPU为基于Intel 8051, Maxim 80DS390, Zilog Z80 和Motorola 68HC08 的单片机。 下载网址: 用户可以根据自己的PC操作系统决定下载的版本,我们此次试验使用的版本为Supported Windows ‐ x86 Binaries安装版。  3 获取TINIUX源码 首先下载TINIUX开发包,步骤如下:  ‐ 仓库地址:    ‐ 点击“clone or download”按钮,下载最新版源代码,或者通过点击“releases”标签,下载官方给出的稳定版本。  代码树中各个目录存放的相关内容如下所示:   ‐ Doc: 此目录存放的是蹄牛操作系统TINIUX的简明教程和API使用说明等文档。  ‐ Kernel:此目录存放的是与平台无关的内核代码,包含核心提供给外部调用的接口的头文件以及内核中进程调度、进程通信、内存管理等等功能的核心代码。用户一般不需要修改此目录下的相关内容。  ‐ CPU:此目录以及以下目录存放的是与体系架构紧密相关的适配TINIUX的代码。比如目前我们适配了mcs51/8051,mcs51/8052等系列对应的初始化内容。用户只需要根据所使用的芯片类型及开发平台选择对应的代码文件即可。  ‐ Preset:此目录存放蹄牛操作系统TINIUX的预设参数示例,用户可根据芯片类型进行调整修改。  获取TINIUX源代码之后,我们就可以开始创建自己的project开发工程了。  4 创建TINIUX工程 4.1 创建工程 在安装好Code::Blocks等开发工具后,我们使用Code::Blocks集成开发环境创建TINIUX工程,步骤如下:  ‐ 打开Code::Blocks, 然后点击file‐new‐project...创建一个新的工程    ‐ 弹出窗口为用户提供了各类工程开发模板,此处我们选择MCS51 Project模板,如下图所示。    ‐ 点击go后,出现工程设置对话框,此处我们输入工程名称为TiniuxDemo,并选择工程的文件路径,如下图所示。    ‐ 点击next后,对编译工具进行选择,在Compiler选项我们选择Small Device C Compiler,其它项采用默认设置即可。如下图所示。    ‐ 点击next后,对芯片内存大小进行配置,此处需要参照对应的芯片手册。由于要使用实时操作系统TINIUX,占用的memory空间稍大,在memory model项,我们采用large模式。在输出模式项,选择Create Intel hex file,让工程编译后生成可以直接烧写到芯片中的文件。如下图所示。    ‐ 点击finish之后,一个空的工程即建立完成,新创建完毕的空软件工程如下所示。    完成上面的配置之后,可以将内核源代码添加到工程中。  4.2 添加kernel代码到工程 ‐ 将从Github下载的TINIUX软件包(最新版软件包TINIUX‐master.zip或官方稳定版软件包TINIUX‐ReleaseV2.0.0.zip)解压,把解压后的文件夹更名为TINIUX,并复制到工程所在的文件夹,如本例程的TiniuxDemo文件夹下。  ‐ 在工程树目录中,点击右键,在弹出菜单中点击Add files recursively … 为工程添加TINIUX系统文件。   ‐ 在弹出的对话框中选择对应的芯片文件,如本例程中的TINIUX/CPU/MCS51/SDCC/8051,如下图所示:    ‐ 点击按钮“确定”后,弹出对话框,则直接点击“OK”即把8051文件夹下对应的文件加载到工程中。  ‐ 采用同样的方式加载TINIUX/Kernel下对应的文件,加载TINIUX/Preset/MCS51/8051下对应的文件。添加完毕后,工程目录中包含文件如下图所示:    ‐ 对应的头文件如下图所示:    4.3 配置工程属性 ‐ 把蹄牛操作系统TINIUX中对应的文件加载到工程后,需要为工程(编译器)指定文件所在的目录,以便编译时能找到对应的头文件。通过菜单Project‐Build options…进行设置。如下图所示:    ‐ 在弹出对话框中,选择Search directories对应的tab页面,通过“Add”按钮添加相关文件所在的路径。   需要添加的文件路径包括: TINIUX\CPU\MCS51\SDCC\8051; TINIUX\Kernel; TINIUX\Preset\MCS51\8051; ..\TiniuxDemo;  ‐ 添加过程中提示是否使用相对路径,点击“是”即可。添加完毕之后,所加的路径如下图所示:    添加完毕之后,点击按钮“OK”即可;  ‐ 根据芯片类型,调整默认包含的头文件  需要调整的头文件有两处,一处为OSPreset.h文件,一处为main.c文件; 在OSPreset.h文件中, 把#include mcs51/8052.h调整为#includestc8.h在main.c文件中, 把#include mcs51/8051.h调整为#includestc8.h 注:头文件stc8.h为SDCC编译平台下对应的头文件,在示例工程中会附带此文件,用户可以参考使用。  4.4 验证移植后的工程  ‐ 配置完工程后,即可通过菜单Build‐Build进行编译,或者通过Ctrl‐F9快捷键进行编译,如下图所示:    编译完成后,若提示无错误,同时在文件夹TiniuxDemo/bin/Debug生产“TiniuxDemo.omf”与“TiniuxDemo.hex”文件,则移植蹄牛操作系统TINIUX成功,此时产生的“TiniuxDemo.hex”则可以通过相关工具直接烧写进目标芯片中使用。  若编译失败,则需按照编译器的提示信息进行对应的调整。  5 使用TINIUX开发 TINIUX中提供的功能包括如下内容: 任务创建与删除、任务同步(信号量、互斥锁)、动态中断注册机制等等内容,更详细的内容可以参考“蹄牛操作系统TINIUX简明教程”中描述的相关内容。下面章节将对任务和中断进行说明。  5.1 创建任务  ‐ 用户使用OSTaskCreate(...)等接口函数来进行任务的创建。具体可以参考《蹄牛操作系统TINIUX简明教程》中的使用方法来创建管理任务。  5.2 系统tick中断配置修改 芯片运行时钟频率(主频)也是通过预置文件“OSPreset.h”来配置的,其宏定义为SETOS_CPU_CLOCK_HZ,在示例工程中,C8051F120支持倍频功能,我们使用倍频之后的运行频率,即98MHz,同时定时器使用CPU运行频率的12分频,即8MHz;  TINIUX操作系统ticks运行频率通过预置文件“OSPreset.h”中的宏定义SETOS_TICK_RATE_HZ来配置。在系统启动时,通过FitCPU.c文件中的FitSetupTimerInterrupt()函数,配置芯片指定的寄存器,使系统时钟(中断)参数生效;  注:在官方示例中,我们通常配置ticks频率为1000Hz,这个ticks频率主要便于对系统的性能测试;对于运行主频不高的MCS‐51单片机系列,适当降低TINIUX系统ticks频率,运行效率会更高。 5.3 TINIUX资源配置 ‐对于嵌入式系统来说,内存都是比较宝贵的资源,因此一般的程序都会严格管理内存使用,TINIUX也一样,需要使用多大的内存,可以根据实际的task数量、信号量、互斥锁、timer、消息队列、链表等内容的数量来决定的(根据各自的结构体大小以及数量计算),总的内存池的大小由系统宏定义OSTOTAL_HEAP_SIZE来确定。  ‐TINIUX中的内存使用可以通过参数预置文件“OSPreset.h”进行配置。在系统预置文件中使用宏定义SETOS_TOTAL_HEAP_SIZE来确定内存池的大小,并以此来管理任务、信号量、消息队列等等资源的创建。  ‐对于MCS‐51单片机,运行效率高的RAM空间一般在256字节,扩展的XRAM空间会稍大,TINIUX系统在启动时,处于挂起及休眠状态的任务或分配到XRAM空间,只有当前运行的任务会分配到RAM空间。同时为了减少对XRAM空间的占用,推荐裁剪掉信号量、互斥锁、timer、消息队列等功能模块,只启用系统内轻量级的同步信号与同步消息功能。 6 移植其他内核的芯片 ‐ 目前TINIUX官方已经支持MCS‐51/8051 8052等系列的芯片,用户若需移植TINIUX到其他内核的芯片时,需要在CPU下添加一个芯片所属系列的目录,并且在该新增加的目录下添加FitType.h、FitCPU.h、FitCPU.c等文件,或根据开发平台(SDCC,keil,IAR等)的要求,添加相应的汇编文件。FitType.h文件主要根据平台的特点定义TINIUX系统的数据类型,FitCPU.c文件主要定义系统ticks中断,SVC中断,中断锁定,task调度及调度时寄存器的保存与恢复等。  ‐ 目前TINIUX官方适配了MCS‐51/8051 8052等系列的芯片移植文件,其中8051系列的移植文件使用了传统51定时器Timer0的模式1,具有16位宽,但无法自动重载,系统会自动根据ticks频率设置timer0重载起点。此种定时器模式的优点是适用于大多数51/52等系列的单片机,但是会导致系统时间漂移。目前很多芯片生产厂商都优化了Timer0的功能,若具有16位宽并且具有自动重载

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功