ucos ii 文件分析

1. 平台介绍

本文档为基于uCOSII操作系统做开发的人员描述了一些uCOSII操作系统的基本特征。 

1.1 结构图

 

1  整体结构图

2. 基本特征

2.1 uCOSII基本特征

uCOSII操作系统目前支持如下的基本特征:

1. 提供抢占式任务调度服务

2. 提供任务间同步与通信服务(如邮箱、消息队列、信号量、内存管理等)

3. 提供任务管理服务

4. 中断管理支持嵌套(中断嵌套层数最多255

2.2 uCOSII存储配置

当前uCOSII的配置如下:

配置项

配置值

OS_MAX_EVENTS

10

OS_MAX_FLAGS

5

OS_MAX_MEM_PART

5

OS_MAX_QS

4

OS_MAX_TASKS

20

OS_TASK_TMR_STK_SIZE

128

OS_TASK_STAT_STK_SIZE

128

OS_TASK_IDLE_STK_SIZE

128

在上述配置情况下,在metaWare IDE优化选项为-O1的情况下,代码大小为19K左右,数据大小为8K左右。

2.3 uCOSIItick配置

         如无特殊要求,性能功能不受影响情况下,配置1 tick/ms,具体可根据实际应用的性能功能要求和HCLKTimer0的时钟情况来调整bsp_os.c中全局变量unsigned int cyc = 0xXXXXX; 的值来改变Tick的频率。

3. 任务的建立       

1. 任务栈的建立

每个任务都需要自己的栈空间,因此在建立任务之前,先给任务开辟一块RAM作为该任务的栈空间。示例如下:

OS_STK  task1_stk[TASK_STK_SIZE];

2. 任务实体的编写

编写任务函数及实体,一个任务通常是一个无限的循环。示例如下:

static void task1(void * par)

{

#if OS_CRITICAL_METHOD == 3u        

      OS_CPU_SR  cpu_sr = 0u;

#endif

unsigned int cnt = (unsigned int) par;

while(1) {

OSTimeDlyHMSM(0, 0, 0, 3000);

OSTaskResume(TASK2_PRI);

}

}

3. 将任务加入任务管理行列

使用OSTaskCreate接口函数来将任务加入任务管理行列,需要注意,此处要提供任务函数实体的入口地址,任务的栈空间的TOP地址及任务优先级。

初始任务的创建OSTaskCreate必须在OSInit接口函数之后和OSStart接口函数之前,其他任务的创建可在任务实体中调用OSTaskCreate接口函数来建立新任务。示例如下:

OSInit();

os_err = OSTaskCreate(task1, (void *)1, p_task1_stk, TASK1_PRI);

os_err = OSTaskCreate(task2, (void *)2, p_task2_stk, TASK2_PRI);

OSTaskSuspend(TASK2_PRI);

OSStart();

或者如下所示:

static void task1(void * par)

{

#if OS_CRITICAL_METHOD == 3u        

      OS_CPU_SR  cpu_sr = 0u;

#endif

unsigned int cnt = (unsigned int) par;

os_err = OSTaskCreate(task3, (void *)1, p_task3_stk, TASK3_PRI);

os_err = OSTaskCreate(task2, (void *)2, p_task2_stk, TASK2_PRI);

while(1) {

OSTimeDlyHMSM(0, 0, 0, 3000);

OSTaskResume(TASK2_PRI);

}

}

4. 中断与异常处理函数的建立

4.1 中断与异常的处理过程

       系统将所有的中断入口统一为函数cpu_int_entry的入口地址,将所有的异常入口统一为函数cpu_exc_entry的入口地址。用户无需修改os_cpu_a.s文件中cpu_int_entrycpu_exc_entry的函数实体内容。在cpu_int_entrycpu_exc_entry中,系统做完相关处理后,会根据当前中断或异常优先级来决定跳转到中断异常处理函数列表_kernel_exc_tbl的相应入口去执行中断或异常处理函数。而中断异常处理函数列表_kernel_exc_tbl中的具体的函数入口则需要用户建立。

4.2 用户的中断与异常处理函数的建立

1. 中断与异常处理函数实体的编写

如下所示:

static void OSTickISR( void )

{

/* clear timer interrupt */

write_aux_reg(ARC_REG_TIMER0_CTRL, TIMER_CTRL_IE | TIMER_CTRL_NH);

OSTimeTick();

}

2. 将函数入口地址加入中断异常处理函数列表_kernel_exc_tbl

初始化设备后,将中断或异常处理函数的入口加入中断异常处理函数列表_kernel_exc_tbl中,如下所示:

arc_install_exc(INHNO_TIMER, (EXC_HANDLER)OSTickISR);

其中INHNO_TIMERTimer在芯片内核中的中断异常号,OSTickISR则为Timer中断对应的中断处理函数入口地址。

然后使能中断即可。

5. 主要文件说明  

uCOSII内核又可区分为两块:

1. 内核跟移植相关的部分,包括对中断和异常的处理、任务切换及临界段等

文件名

文件说明

os_cpu_a.s

uCOS内核中需要用户参与修改的部分,包括任务切换代码、中断处理代码、异常处理代码等(目前已移植完毕,用户不需要修改)

os_cpu_c.c 

uCOS内核中,提供给用户编写用户的钩子程序的文件

os_cpu.h

与移植相关的函数声明

os_cfg_r.h

与移植相关的操作系统资源配置

2.其他的uc/os-ii文件

uC/OS-II内核与体系结构无关的服务代码,不需要做任何修改的部分

文件名

文件说明

os_dbg.c

uCOS内核中,提供给用户用于配置调试的文件

os_core.c

uCOS内核的功能函数,用户不需要修改

os_flag.c

uCOS提供的时间标志组管理,用户不需要修改

os_mbox.c

uCOS提供的消息邮箱管理,用户不需要修改

os_mem.c

uCOS提供的内存管理,用户不需要修改

os_mutex.c

uCOS提供的互斥信号量管理,用户不需要修改

os_q.c

uCOS提供的队列管理,用户不需要修改

os_sem.c

uCOS提供的信号量管理,用户不需要修改

os_Task.c

uCOS提供的任务管理,用户不需要修改

os_time.c

uCOS提供的时间管理,用户不需要修改

os_tmr.c

uCOS提供的软Timer管理,用户不需要修改

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

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

相关文章

PJ Naughter's Freeware Library

http://www.codeproject.com/Articles/519/PJ-Naughter-s-Freeware-Library

FIFO求和实验

FIFO求和实验 实验目标:使用 Matlab 生成一个*.txt 文件,文件中包含模拟求和的数据, PC 机通过串口 RS232 将数据传给 FPGA,使用双 fifo 实现三行数据的 FIFO 求和,通过串口 RS232将求和后的数据回传给 PC 机,并通过串口助手打印出求和数据。 实验要求: *.txt 文件包含…

《老北大讲义》及其背后的故事

原北大校长胡适 不久前读到陈平原先生的一篇文章《早期北大文学史讲义三种》,该文对上世纪初北京大学的文科教学尤其是讲义的风行,做了非常细致的披露和分析。他说:(老师授课)“很少采纳通用教材,而喜欢临时…

日语过级 JLPT简介

JLPT(Japanese Language Proficiency Test),“日本语能力测试”是为了适应世界各国学习日语人数日渐增加的趋势,日本国际交流基金及其财团法人日本国际教育协会于1984年建立了一套较为完整的考试评价体系--日本语能力测试,并于同年开始在有关国家和地区实…

jtag相关

http://www.cnblogs.com/TaigaCon/archive/2012/12/20/2826941.html JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、…

为中国游牧蒙古人造像

第一次见到阿音,近距离地观看他的摄影,让我有一种愧疚感。作为蒙古人,在北京生活了30多年,我与自己民族的根和那片正在消逝的草原故地越来越疏远了。曾有人问我对故乡的理解,我说:我的故乡不过是记忆&#…

基于sobel算法的边缘检测设计与实现

基于sobel算法的边缘检测设计与实现 边缘是图像的基本特征。边缘检测针对的是灰度图像,目的是标识数字图像中灰度变化明显的点。 边缘检测的方法大致可以分为两类:基于查找的一类,通过寻找图像一阶导数中最大值和最小值来检测边界。 基于零穿越的一类,通过寻找图像二阶导数…

基于SPI协议的Flash全擦除

基于SPI协议的Flash全擦除 `timescale 1ns / 1ps module flash_be_ctrl(input wire sys_clk,//系统时钟频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出…

单片机运行相关

1. 类似51,AVR这类的单片机,程序只能在ROM或FLASH里运行。STC的芯片一般是标准51或增强51,用的是FLASH,程序只能在FLASH中运行。2. ARM的程序即可以在FLASH里运行也可以在RAM里运行,不过能运行程序的FLASH只能使NorFla…

《心欢喜,灵快乐》出版

深圳女作家、画家崔文僮的散文绘画集出版。该书是她观察生活、体验人生、感悟艺术的真实记录。著名女作家徐小斌看了她的文章和绘画,写道:“‘生活家’这个概念令人非常感兴趣。文僮决定做一个‘有追求’的‘生活家’,这本身就十分有趣&#…

Sublime Text快捷命令

到页面底部:Ctrl End 这个快捷键可以将光标移动到当前页面的底部。 到页面顶部:Ctrl Home 这个快捷键可以将光标移动到当前页面的顶部。 批量注释:Ctrl / (Windows/Linux) 或 Cmd / (Mac) 这个快捷键可以在选中的行上添加或删除注释…

SPI-Flash页写实验

SPI-Flash页写实验 `timescale 1ns / 1ps module flash_pp_ctrl(input wire sys_clk,//系统时钟,频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出从输…

散文绘画集《心欢喜,灵快乐》研讨会在京举行

中国作家网2009年07月28日15:53消息:7月28日,深圳女作家崔文僮创作的散文绘画集《心欢喜,灵快乐》研讨会在京举行。与会的评论家、画家和编辑们就崔文僮的散文和绘画进行了深入的分析和热烈讨论,专家们认为:作为一个非…

spi flash驱动

移植需要更改sendrcv函数里面内容,宏定义内容 #define DRV_SPI_FLASH_WRITE_ENABLE (0x06) //Write Enable #define DRV_SPI_FLASH_WRITE_DISABLE (0x04) //Write Disable #define DRV_SPI_FLASH_READ_STATUS_REG …

C++的int初始化

&#xfeff;int MyInt(56);std::cout<<"MyInt"<<MyInt<<std::endl;int MySecondInt int(); //int变量可以这样初始化std::cout<<MySecondInt<<std::endl;//那么可不可以这样初始化呢? int MyThirdInt(int());//error!!! now…

基于I2C协议的EEPROM驱动控制

基于I2C协议的EEPROM驱动控制 `timescale 1ns / 1ps module i2c_ctrl #(parameter DEVICE_ADDR = 7b1010_000,//i2c设备地址 parameter SYS_CLK_FREQ = 26d50_000_000,//输入系统时钟频率 parameter SCL_FREQ = 18d250_000 //i2c设备scl时钟频率 ) (input wire sys_clk,/…

做一个幸福的“生活家”:谈《心欢喜,灵快乐》

蝴蝶 工笔 放慢时间&#xff0c;静下心情&#xff0c;感受平常的生活&#xff0c;学习和体会生活带给我们的小小幸福&#xff0c;这或许是现代人很难做到的一种状态。正如我非常欣赏的法国女钢琴家埃莱娜格瑞莫所说&#xff1a;“谁能让我们幸福&#xff1f;如果不是我们自身&…

main函数相关

在历史上&#xff0c;大多数UNIX系统对main函数提供了三个参数&#xff0c;原型如下&#xff1a; int main(int argc, char *argv[], char *env[] ); 其中第三个参数是环境表地址。 ANSI C规定main函数只有两个参数&#xff0c;而且第三个参数与全局变量environ相比也没有带来更…

导演李大为婚礼全过程(一)

新锐导演李大为于昨日&#xff08;8月1日&#xff09;在北京北郊的拉斐特城堡举行隆重婚礼。新娘是赵怡然。李大为曾执导过电视剧《金粉世家》《红粉世家》和电影《走着瞧》&#xff0c;其中《走着瞧》入围了去年的东京电影节&#xff0c;在今年的上海国际电影节上获得了包括最…

对以前的改进MFC略缩图控件改进

以前写了一篇日记&#xff0c; 显示略缩图&#xff0c;见 《自绘列表框控件显示略缩图----再稍微改进点点。。》 http://blog.csdn.net/hemmingway/article/details/7483619 这次给他加点改进&#xff0c;就是增加删除被勾选的图片。。。 增加两个函数&#xff1a; CString …