1:概述:

SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。

最大的特点就是:实时。

2:XDCtools:

XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的API函数,静态配置文件和打包(packaging)操作。XDC最主要的亮点在于它标准化了传递过程,并简化了在应用程序中引用目标平台下其他包的过程。

在工程创建的时候需要先创建一个基于RTST的平台,用来分配和管理内存和缓存,它可以自动的生成对应的cmd文件。创建的过程如下:(基于TI DM6437平台)

3:基于RTSC平台的SYS/BIOS的工程的创建:

4:四种线程

线程是一组在存储在存储器中的代码,一旦寄存器被正确初始化,CPU就会执行这些代码。线程可以是任何类型的,SYS/BIOS定义了四种线程类型:

硬件中断(HWI),软件中断(SWI),任务(TASK),空闲(Idle)。

硬件中断:时间要求最为严格,要就实时响应的任务:一般为外设和内部的实时时间和定时器模块(定时器模块是通过硬件中断实现的,使用硬件的定时器)。

软件中断:对时间要求较为低的一种中断线程。(时钟模块是基于软件中断模块的定时器模块)

任务:CPU执行的主要线程,和软件中断的区别,可以被阻塞(可以等待)

空闲:优先级最低

各线程有隐式和显示的优先级:隐式优先级是由线程的类型决定的,显示优先级由软件的编程者决定,并且允许抢占的:就是高优先级的线程能够抢线程占低优先级的线程,优先执行,这种高于优先级的调度管理机制保证了最高优先级的线程能在第一时间被执行。下面是线程的抢占的示意图:

5:组件的配置

CCS提供了两种组件的配置的方法,一种是图形化的配置方法,用户可以点击添加相应的模块:

另外一种方式,是通过手动编辑.cfg文件,该文件采用JavaScript语言编写,同样也可以配置组件。

6:线程的创建和配置

SYS/BIOS在线程创建和配置方面,提供两种方式,一种是静态的创建,通过XDCtools创建和配置。一种是动态的创建,就是在程序中创建,下面就以HWI为例程,分别列出;两种创建方式:

静态创建:可以通过图形化的界面进行配置,也可以通过javascript脚本语言手动编写.cfg文件进行配置,下面写出手动编写.cfg文件配置Hwi:

var hwi0Params =new Hwi.Params();

hwi0Params.instance.name= "Uart_Handle";

hwi0Params.eventId= 85;

Program.global.Uart_Handle= Hwi.create(8, "&Int_Uart1ISR", hwi0Params);

动态配置:在程序中进行配置

需要引用的头文件

#include<ti/sysybios/hal/Hwi.h>

Hwi_HandleUart_Handle;

Hwi_Paramshwi0Params;

Error_Block eb;

Error_init(&eb);

Hwi_Params_init(&hwi0Params);

hwi0Params.eventId =  85;

Uart_Handle =Hwi_craete(8, "&Int_Uart1ISR", & hwi0Params, &eb) ;

7:任务的调度

SYS/BIOS任务线程有0-31个优先级(默认0-15,优先级0被空闲线程使用,任务最低优先级为1),但是在内存允许的情况下可以不限制的创建任务数量。SYS/BIOS有独立的内存堆栈,可以为等待某一事件的发生而被挂起,任务会被其他更高优先级的线程打断。数量和状态可以在程序执行时动态的更改,优先级也可以动态的修改。

空闲线程是一种非实时性的线程,并且仅当没有任何其它线程(HWI/SWI/TASK运行时才会运行),所有空闲线程运行在同一个线程,而且可以被其它线程随时抢占,默认使用任务堆栈,如果任务线程被禁用使用系统堆栈,一个接一个运行,每一个空闲线程函数都会从开始执行到结束。所有函数执行完后再从第一个函数执行,周而复始。

8:信号量

信号量通常用于协调一些处于竞争关系的任务之间对共享资源的访问。可以使任务处于挂起状态,用来等待某一个特定的事件,只有当这个事件发布的时候才能继续执行任务,这是通过信号量来实现的,而信号量操作主要有两种操作:一个是post,一个是pend,而这两种操作就是用来改变信号量的计数值,而在SYS/BIOS中的信号量有两种计数的模式,一种是以2进制的模式计数,一种是计数的模式进行计数。信号量的值为0的时候任务处于挂起状态,信号量为1的时候任务恢复继续执行。下面是两种计数模式的区别:

操作(假定计数初值为0)

二进制

计数

Semaphore_post()sem);

1

1

Semaphore_pend()sem);

0

0

Semaphore_post()sem);

1

1

Semaphore_post()sem);

1

2

计数

任务状态

Semaphore_pend()sem);

0

挂起

Semaphore_post()sem);

>1

恢复

信号量的创建:同样是两种方式,静态创建和动态创建,下面写出动态创建的例程:

Error_Block eb;

Error_init(&eb);

Semaphore_Params_init(&semParams);

semParams.mode =Semaphore_Mode_BINARY;

semParams.event = evt;

semParams.eventId =Event_Id_00;

sem = Semaphore_create(1,&semParams, &eb);

if (sem == NULL)

{

System_abort("Semaphore create failed");

}

else

{

System_printf("Semaphore create is OK\n");

}

9:邮箱

邮箱SYS/BIOS系统用来在任务间进行buffer传输的,在邮箱创建的时候配置传输buffer的大小,Mailbox_post()函数执行完成代表,邮箱buffer已经传输到缓冲区,当执行Mailbox_pend()时,就从缓冲区中获得数据。

邮箱的创建:Mailbox_HandleMailbox_create(SizeT   bufsize,

UInt   numBufs,

Mailbox_Params   *params,

Error_Block   *eb)

Void Mailbox_delete(Mailbox_Handle*handle);

Mailbox_pend()是用来从邮箱中读取Bufferde,如果邮箱中没有Buffer就等待timeout 的时间;

Bool Mailbox_pend(Mailbox_Handle handle,

Ptr buf,

UInt timeout);

Mailbox_post()是用来存入Buffer到邮箱,如果邮箱已满,则等待timeout时间;

Bool Mailbox_post(Mailbox_Handle handle,

Ptr buf,

UInt timeout);

10:事件

事件同样提供了一种线程间通信和同步的方法,它和信号量有相同的地方,不同的地方是,事件允许你指定多个任务等待的条件。

像信号量一样,事件的挂起和发布也是通过Event_pend(),Event_post()来实现的,如果是一个事件的挂起和发布,那么它和信号量是一样的,一个事件模块的创建,可以管理32个事件,通过事件ID来管理,而每一个事件都相当与一个信号量。

Event_pend()函数的参数有一个"andMask"和一个"orMask"。andMask对应的是需要所有的事件都发布才能解除任务的挂起状态,orMask是任何一个事件的发布都可以解除任务的挂起状态。

同样Event_pend()也有一个等待时间的参数,功能和信号量是一样的。

下面是一个创建事件的例程:

Event_HandlemyEvent;

Error_Block eb;

Error_init(&eb);

/* Defaultinstance configuration params */

myEvent =Event_create(NULL, &eb);

if (myEvent ==NULL) {

System_abort("Eventcreate failed");

}

事件的挂起:

UIntEvent_pend(Event_Handle event,

UInt andMask,

UInt orMask,

UInt timeout);

事件的发布:

VoidEvent_post(Event_Handle event,

UInt eventIds);

11:问题记录

1:信号量和邮箱可以编入事件

可以将信号量和邮箱编入一个事件,在信号量和邮箱创建的时候,写入事件的ID,当信号量或者邮箱发布的时候,就等于对应事件ID的事件的发布。

2:任务堆栈的配置:

每个任务可以配置独立的堆栈的大小,在任务创建的时候配置。堆栈太小,会导致任务创建失败。

3:I-RTOSKernel RTSC 和  XDCtools的关系

TI-RTOS Kernel就是指TI公司开发的SYS/BIOS实时操作系统。

RTSC是实时的软件组件平台,基于这个RTSC来创建SYS/BIOS

XDCtools是依赖于RTSC的平台配置的工具

TI-RTOS Kernel是系统,RTSC是平台,XDCtools是工具。

4:cmd更改问题:

.cmd文件只能通过RTSC平台的配置自动生成,不能自己手动的更改,自己通过编辑修改的.cmd在编译又会从新变回去。

5:SYS/BIOS下自定义段的方法:

手动编辑.cfg文件:Program.sectMap["L3_DATA"]= "DDR";

TI 实时操作系统SYS/BIOS使用总结相关推荐

  1. TI OS --- 中文版SYS/BIOS之 API的帮助

    编程接口的参考帮助系统 ​在TI-RTOS.SYS/BIOS及其TI-RTOS的其它组件里,编程接口的参考帮助系统称为"CDOC". 1. 为了打开在线帮助系统,在CCS里选择He ...

  2. TI SYS/BIOS

    [-] 1概述 2XDCtools 3基于RTSC平台的SYSBIOS的工程的创建 4四种线程 5组件的配置 6线程的创建和配置 7任务的调度 8信号量 9邮箱 10事件 11问题记录 1:概述: S ...

  3. TI-RTOS Kernel(SYS/BIOS)---线程模块

    本章描述了SYS/BIOS程序可以使用的线程类型 文章目录 SYS/BIOS 启动流程 线程模块概览 线程类型 线程的选择使用 线程特征的比较 线程优先级 释放和抢占 钩子 在SMP系统上使用SYS/ ...

  4. TI-RTOS Kernel(SYS/BIOS)---SYS/BIOS简介

    本章提供了SYS/BIOS及其与TI-RTOS和其他TI-RTOS组件的关系 什么是SYS/BIOS SYS/BIOS是一个可扩展的实时内核.它被设计为实时调度和同步或实时监测.提供抢先多线程.硬件抽 ...

  5. 嵌入式实时操作系统ucos-ii_「正点原子NANO STM32开发板资料连载」第三十六章 UCOSII 实验 1任务调度...

    1)实验平台:alientek NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第三十六章 ...

  6. 【TI-mmWave】三、CCS Projects导入报错:This project requires product SYS/BIOS v6.73.1.01, or equivalent......

    项目场景: 刚刚上手TI的mmWave IWR6843,按一. 毫米波(mmWave) 上手TI IWR1443--mmWave Vital Signs (生命体征实验)这位大佬的步骤进行SDK.CC ...

  7. QNX 实时操作系统(Quick Unix)

    Gordon Bell和Dan Dodge在1980年成立了Quantum Software Systems公司,他们根据大学时代的一些设想写出了一个能在IBM PC上运行的名叫QUNIX(Quick ...

  8. 为什么采用实时操作系统?

    为什么采用实时操作系统? 采用while(1)死循环等待中断的方式,对于不支持抢占式的处理器,很可能因为考量不周而导致中断资源不能及时释放造成中断丢失: CPU频率远大于外设频率,少不了存在大量等待时 ...

  9. INtime-可与Windows在同个PC运行的实时操作系统(下)

    上一篇系列文章"INtime可与Windows在同个PC运行的实时操作系统(上)"中我们介绍INtime实时操作系统的基本特性与功能.本篇文章将着重介绍INtime RTOS内部的 ...

最新文章

  1. [转]symbian基本类型转换
  2. 【windows】安装pytorch1.7.1-cpu版本的geometric过程记录
  3. python测试开发django-25.表单提交之post注册案例
  4. java thread 几个状态_Java-Thread 线程的几种状态
  5. event事件的坐标 offsetWidth client scroll
  6. catgroup linux_Linux用户(user)和用户组(group)的日常管理与操作教程概述
  7. 20.有效的括号(力扣leetcode) 博主可答疑该问题
  8. 合肥青少年信息学计算机竞赛试题,合肥市第二十九届青少年信息学奥林匹克竞赛(小学组)试题及部分答案...
  9. vbs如何调用c语言函数,vbscript基础教程-自定义函数和过程
  10. 如何设置无线路由器?
  11. Juniper防火墙常用命令
  12. html播放iOS铃音,ios – 如何在Cordova的HTML5视频播放过程中忽略铃声设置
  13. 解决The number of method references in a .dex file cannot exceed 64K的问题
  14. threejs正方体六面贴图
  15. Qt国际化详细步骤(手把手教你如何国际化)
  16. python 猪八戒网接单_python接单平台简单整理
  17. 如何利用Python动态模拟太阳系运转
  18. Python报错ModuleNotFoundError: No module named ‘concurrent‘
  19. TeamViewer14 ubuntu 破解商业环境
  20. SDUT-OJ偏序关系

热门文章

  1. 密封表贴电感的漏磁以及在150kHz导航信号放大器中的性能
  2. 220V黄金光的LED灯带测试与结构
  3. 无引脚表贴元器件焊接
  4. c带gui的图书馆管理系统_定了!区图书馆24小时城市书屋即将在这天正式对外开放...
  5. mapreduce将key相同的value结合在一起_个人理解Hadoop中MapReduce
  6. unitoy机器人怎么联网_机器人操作说明
  7. mysql myasam_MySQL锁(MyISAM和InnoDB)
  8. 四川音乐学录音艺术与计算机音乐,艺考中作曲专业和录音专业有什么不同呢?...
  9. oracle账号注册公司名称,oracle+账号创建与管理oracle创建数据库
  10. 30针4k屏_华为发布智慧办公战略产品 企业智慧屏系列