嵌入式实时操作系统复习

发布 2022-10-21 10:41:28 阅读 5598

任务就绪组是: 为了查找高级优先级的任务与正在运行任务的优先级进行比较,以确定是否进行切换。

typedef struct os event

int8u oseventtype事件控制块的类型*/

void *oseventptr指向下一个ecb或消息队列的指针*/

int16u oseventcnt; /信号量计数值,对除信号量意外其他事件无效*/

os prio oseventgrp; /事件等待组*/

os prio oseventgbl[os event tbl size等待事件的任务表*/

int8u *oseventname事件名称*/

os event;

移植步骤:1、使用开发软件mdk4.70,为uc/os操作系统建立一个目录,将系统的**复制到该目录下,要有一个子目录。

2、在该目录下创建工程。

3、建立主程序。

4、对os_说明,根据硬件修改os_

5、修改os_

6、编译,**,运行。

信号量函数列表:

内存管理函数:

编程题例子。

一、#include ""

#include ""

#include ""

#include ""

#include ""

#define start_task_prio10 //设置任务优先级,开始任务的优先级设置为最低。

#define start_stk_size64//设置任务堆栈大小。

os_stk start_task_stk[start_stk_size];/任务堆栈。

void start_task(void *pdata);/任务函数

#define led0_task_prio7 //设置任务优先级。

#define led0_stk_size64//设置任务堆栈大小。

os_stk led0_task_stk[led0_stk_size];/任务堆栈

void led0_task(void *pdata);/led0任务。

#define led1_task_prio6 //设置任务优先级。

#define led1_stk_size64//设置任务堆栈大小。

os_stk led1_task_stk[led1_stk_size];/任务堆栈。

void led1_task(void *pdata);/led1任务。

int main(void)

stm32_clock_init(9); 系统时钟设置。

delay_init(72延时初始化。

led_init初始化与led连接的硬件接口。

osinit();

ostaskcreate(start_task,(void *)0,(os_stk *)start_task_stk[start_stk_size-1],start_task_prio );创建起始任务。

osstart

/开始任务。

void start_task(void *pdata)

os_cpu_sr cpu_sr=0;

pdata = pdata;

os_enter_critical进入临界区(无法被中断打断)

ostaskcreate(led0_task,(void *)0,(os_stk*)&led0_task_stk[led0_stk_size-1],led0_task_prio

ostaskcreate(led1_task,(void *)0,(os_stk*)&led1_task_stk[led1_stk_size-1],led1_task_prio

ostasksuspend(start_task_prio); 挂起起始任务。

os_exit_critical退出临界区(可以被中断打断)

void led0_task(void *pdata)//led0任务。

while(1)

void led1_task(void *pdata)//led1任务。

while(1)

二、#include ""

#include ""

#include ""

#include ""

#include ""

os_event *mymbox;

#define start_task_prio10 //设置任务优先级,开始任务的优先级设置为最低。

#define start_stk_size64//设置任务堆栈大小。

os_stk start_task_stk[start_stk_size];/任务堆栈。

void start_task(void *pdata);/任务函数

#define mbox_sen_prio6 //设置任务优先级。

#define mbox_sen_stk_size64//设置任务堆栈大小。

os_stk mbox_sen_stk[mbox_sen_stk_size];/任务堆栈

void taskmessagesen(void *pparam);/邮箱发送任务。

#define mbox_rec_prio7 //设置任务优先级。

#define mbox_rec_stk_size64//设置任务堆栈大小。

os_stk mbox_rec_stk[mbox_rec_stk_size ];任务堆栈。

void taskmessagerec(void *pparam);/邮箱接收任务。

int main(void)

stm32_clock_init(9); 系统时钟设置。

delay_init(72延时初始化。

uart_init(72,9600);

osinit();

ostaskcreate(start_task,(void *)0,(os_stk *)start_task_stk[start_stk_size-1],start_task_prio );创建起始任务。

osstart

/开始任务。

void start_task(void *pdata)

os_cpu_sr cpu_sr=0;

pdata = pdata;

os_enter_critical进入临界区(无法被中断打断)

ostaskcreate(taskmessagesen,(void *)0,(os_stk*)&mbox_sen_stk[mbox_sen_stk_size-1],mbox_sen_prio

ostaskcreate(taskmessagerec,(void *)0,(os_stk*)&mbox_rec_stk[mbox_rec_stk_size-1],mbox_rec_prio

ostasksuspend(start_task_prio); 挂起起始任务。

os_exit_critical退出临界区(可以被中断打断)

void taskmessagesen(void *pparam)

int32u scount;

scount=0;

mymbox=osmboxcreate(&scount);

if(mymbox==(os_event *)0)

printf("时间:%d,taskmessagesen创建邮箱成功",ostimeget())

while(1)

void taskmessagerec(void *pparam)

int8u *perr;

int8u err;

int32u *prcount;

perr=&err;

err=os_err_none;

if(mymbox==(os_event *)0)

prcount=(int32u *)osmboxpend(mymbox,0,perr);

嵌入式实时操作系统复习

a.计算机操作系统的作用和功能是什么?计算机操作系统为应用程序提供了一个界面友好,性能稳定 安全,效率高,操作方便的虚拟计算机。它的主要功能有 1 处理器的管理。2 存储的管理。3 设备的管理。4 文件的管理。5 网络和通信管理。6 提供用户接口。b什么是实时操作系统?它应满足那三个条件?试列举几个...

嵌入式实时操作系统

嵌入式实时操作系统 embedded real time operation system,rtos 当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。1 多任务 2 有线...

Nucleus嵌入式实时操作系统

一 mentor graphics esd公司简介。二 nucleus操作系统的特点。三 源 操作系统的优势。四 nucleus操作系统开发环境的配置。五 nucleus的网络浏览器 webbrowse 介绍。六 nucleus操作系统的应用领域及在国内外的用户。七 nucleus操作系统的成功案例...