51单片机操作系统——RTX51 Tiny

news2024/11/27 9:38:09

简介

RTX51 是keil公司开发的一款实时操作系统,其有两个版本:

1.Tiny 2.Full,区别如下:

  1. RTX51 Full :使用四个任务优先权完成同时存在时间片轮转调度和抢先的任务切换 RTX51工作与中断功能相似的状态下 ,信号和信息可以通过邮箱系统在任务之间互相传递 ,你可以从一存储池中分配和释放内存 你可以强迫一个任务等待中断 超时或者是从另一个任务或中断发出的信号或信息。
  2. RTX51 Tiny:仅支持时间片轮转任务切换和使用信号进行任务切换 ,不支持抢先式的任务切换不包括消息历程, 没有存储器池分配程序。

总结来说,Tiny就是RTX51 Full的精简版,只有基本的任务切换功能。

使用方法

使用RTX51操作系统需要有以下要求:

1.keil C51 集成开发环境,其许可证版本必须为PK51,否则无法编译通过。

2. RTX51_Tiny需要占用 定时器0 、定时器0中断以及寄存器组0。用户程序不可再使用这些资源。

 

下面介绍STC15W系列单片机如何使用RTX51_Tiny操作系统:

1.首先将RTX51_Tiny的头文件和Lib库文件添加到工程,这两个文件在keil C51的安装目录下

把这两个文件拷贝到工程目录下,并在Keil中把这两个文件添加到工程。

2.keil配置选项里选择RTX51_Tiny操作系统

 

3.RTX51_Tiny 相关配置 

由于RTX51_Tiny是基于时间片的操作系统,而且它没有优先级的概念,每个任务执行的时间是一定的,即当前任务的时间片达到时,会立即切换到其他就绪的任务,任务的时间片可以通过Conf_tny.A51文件的相关参数修改。

 INT_CLOCK 是 RTX系统的1个滴答时钟的时间,此处定义为33177是指 1个系统滴答时钟=33177个单片机的机器周期,由于我的单片机时钟的33.1776Mhz,所以其一个机器周期为1/33.1776 ≈ 0.0301us,33177个机器周器就是 999.9us≈1ms。注意:此值最大为65536
TIMESHARING 是 一个时间片等于多少个RTX系统的滴答时钟,此处定义为10,即定义时间片为10ms。
 

实验例程:

#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include "reg51.h"

sbit LED=P2^7;
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
sbit SET=P3^1;	 
sbit ADD=P3^0;	  
sbit SUB=P3^2; 

bit  key_mark,direction,sec;
char state,hour,minute,second,pos;
unsigned char buf[8]={0},zxm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void CS(unsigned char n)
{
   c=n/4;
   b=n%4/2;
   a=n%2;   
}

void Send(unsigned char n)
{
   P0=n;
}

void key()
{
   if(!SET)
   {
      if(++state>3)
	      state=0;
   }
   else if(!ADD)
   {
			 if(state==1)
			 { 		   
					if(++hour>23)
						hour=0;
			 }
			else if(state==2)
			{	     
				 if(++minute>59)
					minute=0;
			}    
			else if(state==3)
			{		    
				 if(++second>59)
				 second=0;
			}
   }
   else if(!SUB)
   { 
   	  if(state==1)
	    { 		   
				if(--hour<0)
					 hour=23;
	    }
			else if(state==2)
			{	     
				 if(--minute<0)
					  minute=59;
			}    
			else if(state==3)
			{		    
				 if(--second<0)
				    second=59;
			}
   } 
}

job0 () _task_ 0  
{                  
  os_create_task (1);                 /* start task 1                         */
  os_create_task (2);                 /* start task 2                         */
  os_create_task (3);
	
	while(1)
	{
		 if(++pos>5)
				pos=0;
		 
		 Send(0);
		 CS(pos);

		 if(pos==2||pos==4)
				Send(zxm[buf[pos]] | 0x80); 
		 else
				Send(zxm[buf[pos]]);  
		 
     os_wait(K_TMO,1,0);	 
	}
}

job1 () _task_ 1  
{	
	hour=12;
	state=0;
	
  while (1)  
	{             
    if(sec)
	  {
			sec=0;
			if(state==0)
			{
				if(++second>59)
				{
					 second=0;
					 if(+++minute>59)
					 {
							minute=0;
						if(++hour>23)
							 hour=0;
					 }			
				}
			}	
			buf[0]=second%10;
			buf[1]=second/10;
			buf[2]=minute%10;
			buf[3]=minute/10;
			buf[4]=hour%10;
			buf[5]=hour/10;				
   }		
 }
}

job2 () _task_ 2  
{
  while (1)
	{		
    if((!SET || !ADD || !SUB) && !key_mark)
	  {
	    os_wait(K_TMO,10,0);
			if(!SET || !ADD || !SUB) 
			{
				 key_mark=1;
				 key();		  
			}
		}
		else if(SET && ADD && SUB)
			 key_mark=0;		
  }
}

job3() _task_ 3
{
	int n=0;
	while(1)
	{
		if(++n==300)
		{
			n=0;
			sec=1;
			LED=~LED;
		}
		os_wait(K_TMO,1,0);
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/629104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【最远足迹】【2022Q4 100分】,附详细解题思路

一、题目描述 某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时&#xff0c;随身携带的记录器会不定期地记录自身的坐标&#xff0c;但在记录的间隙中也会记录其他数据。探索工作结束后&#xff0c;探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足…

【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛

【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛 文章目录 【打卡】苹果叶片病害分类和建筑物变化检测数据挖掘竞赛Task 1两个赛题数据可视化任务2 苹果病害数据加载与数据增强任务三 Task 1两个赛题数据可视化 在这个任务中&#xff0c;参赛选手需要对两个赛题的数据进…

卡奥斯开源社区六月创作之星挑战赛开始啦!

活动须知 发布优质文章争榜&#xff0c;获取专属勋章、流量扶持及奖励&#xff01; 活动时间&#xff1a;6 月 1 日- 6 月 30 日 奖品发放&#xff1a;7月10日 参与方式 完成认证发布优质文章&#xff0c;选中相关活动标签&#xff0c;文章默认参与活动 文章要求 文章符合…

宠物行业传统“夫妻店”,如何向“线下 线上”模式转型?

据研究&#xff0c;目前我国宠物店以单体店为主&#xff0c;占比高达85%。      这些单体店规模较小&#xff0c;以夫妻店为主&#xff0c;并且服务区域有限&#xff0c;较少涉及到大规模连锁运营。      同时&#xff0c;在我国宠物店形态中&#xff0c;区域性小规模的…

YOLOV5 训练

YOLOV5训练过程 CUDA 和cuDnnan 安装教程 windows上安装可以参考这篇知乎文章 数据集准备 自己准备数据集 可以使用 labelImg 工具&#xff0c;直接 pip install labelimg 就可以安装了。 命令行中输入 labelImg 就可以运行 标注数据的输出结果有多种过格式&#xff0c;V…

【数据结构与算法】掌握顺序栈:从入门到实践

&#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 顺序栈的实现 初始化栈 判断栈空 判断栈满 入&#xff08;进&#xff09;栈 出栈 获取栈…

【算法系列 | 3】深入解析排序算法之插入排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

冒泡排序、插入排序、希尔排序、选择排序

一、排序协议的定义 在博客的开头的&#xff0c;我们先给出排序协议的定义。因为我们本篇博客含有多种排序方式&#xff0c;为了使每种排序方法对外调用方式一致&#xff0c;我们需要定义一个排序的相关协议。所有排序的相关类都必须遵循该协议&#xff0c;让此协议来定义具体…

Aiohttp异步爬取小说排行榜

Aiohttp异步爬取小说排行榜 *** Aiohttp简介及使用 *** ​ Aiohttp是Python的一个第三方网络编程模块&#xff0c; 它可以开发服务端和客户端&#xff0c;服务端也就是我们常说的网站服务器&#xff1b;客户端是访问网站的API接口&#xff0c;常用于接口测试&#xff0c;也可用…

Vue基础第七篇

一、vuex的使用 1.概念 在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对vue应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间通信。 2.何时…

MyBatis操作数据库实现

说明&#xff1a;MyBatis是作用于三层架构开发&#xff0c;数据访问层&#xff08;Data Access Object&#xff09;的框架&#xff0c;用于访问数据库&#xff0c;对数据进行操作。 一、环境搭建 首先&#xff0c;创建一个SpringBoot模块&#xff0c;然后把MyBatis的环境搭建…

华为OD机试真题 JavaScript 实现【获取字符串中连续出现次数第k多的字母的次数】【2023Q1 100分】,附详细解题思路

一、题目描述 给定一个字符串&#xff0c;只包含大写字母&#xff0c;求在包含同一字母的子串中&#xff0c;长度第 k 长的子串的长度&#xff0c;相同字母只取最长的那个子串。 二、输入描述 第一行有一个子串(1<长度<100)&#xff0c;只包含大写字母&#xff1b;第二…

GEngine一个基于WebGPU的渲染引擎

一、废话篇&#xff1a; 2019年时候就有写一个渲染引擎想法&#xff0c;一直到现在才真正意义上算给实现了当初的想法&#xff0c;写了好几个月了和小伙伴这才有个初版&#xff08;虽然里面还有一堆bug哈&#xff0c;没时间改啊&#xff09;。说在前面GEngine借鉴了其他渲染引擎…

计算机网络方面的面试题目(合集)

python面试题 1、python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock)&#xff0c;这个锁的意思是任一时间只能有一个线程使用解释器&#xff0c;跟单cpu跑多个程序一个意思&#xff0c;大家都是轮着用的&#xff0c;这叫“…

在外web浏览器远程访问jupyter notebook服务器详细教程

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook&#xff0c;它是一个交互式的数据科学和计算环境&#xff0c;支持多种编程语言&#…

利用 canvas 实现背景图片和其他图片以及文字的组合生成新图片

预览世界效果图如下&#xff1a; 注&#xff1a;以下图片中&#xff0c;二维码部分是我动态生成的&#xff0c;以及姓名和工号位置的参数需要动态替换。 实现思路&#xff1a; 利用 canvas 实现在面板上画图以及绘制文字等等。 官方文档 API 地址如下&#xff1a;canvas AP…

知道效果广告,让你的广告投入更有价值!

效果广告作为一种能直接触达用户的广告&#xff0c;在互联网上遍地开花&#xff0c;今天我们就一起来了解下效果广告吧&#xff5e; 1.背景 在传统的门户广告、搜索广告中&#xff0c;一则广告的呈现是针对其所有可覆盖的受众&#xff0c;而真正对广告信息感兴趣的人群只是广大…

代码审计 底层逻辑

红队利用中&#xff0c;主要有以下几个板块。 找到漏洞-->利用漏洞-->权限维持-->痕迹清除。找到漏洞对应的技能是代码审计。 利用漏洞对应的技能是各和实战中利用技巧绕 waf。 权限维持&#xff0c;抽象来看&#xff0c;就是系统自己启动我的恶意代码&#xff0c;实现…

ROS学习——通信机制(话题通信③—注意事项)

2.1.2 话题通信基本操作A(C) Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 043话题通信(C)4_注意事项_Chapter2-ROS通信机制_哔哩哔哩_bilibili 1. int main(int argc, char const *argv[]){} vscode 中的 main 函数 声明 int main(int argc, char const *argv…

更新Navicat Premium 16.2 之 如何使用Navicat连接Redis的新手教程

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…