NIOS2随笔——uCOS-II实时操作系统
1. 概述
本设计采用NIOS2 32位处理器,实现uCOS-II实时操作系统的使用,实现两个任务同时运行,一个LED闪烁,一个串口打印。硬件平台采用ETree的开发板(某宝提供),如下图所示:
2. uCOS-II简介
μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的, 绝大部分代码是用C语言编写的。
uC/OS-II中最多可以支持64个任务,分别对应优先级0~63,其中0 为最高优先级。系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任务数有56个。
uC/OS-II提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,任务挂起和恢复等。
要使uC/OS-II正常运行,处理器必须满足以下要求:
处理器的C编译器能产生可重入型代码;
处理器支持中断,并且能产生定时器中断;
用C语言可以开/关中断;
处理器有一定数量的数据存储器;
处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或内存中的指令。
显然NIOS2处理器符合上述要求,从处理器硬件角度看Nios2需要一定数量的内存空间(SDRAM的空间足够大)、需要一个定时器(添加定时器组件)。
3. Qsys平台搭建
在Qsys平台上添加Interval Timer组件,配置相关参数,如下图所示。
添加完Timer组件的Qsys系统如下图所示。
4. NIOS2软件设计
新建NIOS SBT工程,输入软件工程名‘nios2_ucos’,在project template中选择‘Hello-MicroC/OS-II’,如下图所示。
软件设计两个任务,一个任务使LED每隔一秒闪一次,另一个任务每隔一秒在串口终端打印一次"Hello from task2\n",具体代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include <stdio.h>
#include "includes.h"
#include <io.h>
#include <system.h>
/* Definition of Task Stacks */
#define TASK_STACKSIZE 2048
OS_STK task1_stk[TASK_STACKSIZE];
OS_STK task2_stk[TASK_STACKSIZE];
/* Definition of Task Priorities */
#define TASK1_PRIORITY 1
#define TASK2_PRIORITY 2
/* Prints "Hello World" and sleeps for three seconds */
void task1( void * pdata)
{
while (1)
{
IOWR(PIO_0_BASE,0,1); //LED ON
OSTimeDlyHMSM(0, 0, 0, 500); //hour/minute/second/millisecond
IOWR(PIO_0_BASE,0,0); //LED OFF
OSTimeDlyHMSM(0, 0, 0, 500); //hour/minute/second/millisecond
}
}
/* Prints "Hello World" and sleeps for three seconds */
void task2( void * pdata)
{
while (1)
{
printf ( "Hello from task2\n" );
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
/* The main function creates two task and starts multi-tasking */
int main( void )
{
OSTaskCreateExt(task1,
NULL,
( void *)&task1_stk[TASK_STACKSIZE-1],
TASK1_PRIORITY,
TASK1_PRIORITY,
task1_stk,
TASK_STACKSIZE,
NULL,
0);
OSTaskCreateExt(task2,
NULL,
( void *)&task2_stk[TASK_STACKSIZE-1],
TASK2_PRIORITY,
TASK2_PRIORITY,
task2_stk,
TASK_STACKSIZE,
NULL,
0);
OSStart();
return 0;
}
|
5. 编译运行
右击工程nios2_ucos,选择Build Project。编译完后,下载FPGA配置文件,再右击工程nios2_ucos,选择Run As | Nios II Hardware。FPGA开发板LED每隔一秒闪一次,Nios II Console每隔一秒打印一次“Hello from task2”。
本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1970272
NIOS2随笔——uCOS-II实时操作系统相关推荐
- 基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现
基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现 在基于STM32的示波器的实现的基础上,在STM32上移植UCOS II嵌入式实时操作系统. 在UCOS II操作系统中将各个功能分发 ...
- 实时操作系统UCOS学习笔记1----UCOSII简介
前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核). UCOSII简介 UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Je ...
- 嵌入式实时操作系统μC/OS II(一)
嵌入式实时操作系统μC/OS II 为什么要学习μC/OS-II ㈠.凡从事嵌入式系统开发工作的人,必须对嵌入式操作系统有足够的了解. ㈡.对于初学者,从μC/OS-II开始是个明智的选择. 1.μC ...
- 参考任哲的《嵌入式实时操作系统μC_OS-II原理及应用》,对UCOS的任务调度做了下整理。
参考任哲的< 嵌入式 实时操作系统μC_OS-II原理及应用>,对 UCOS 的任务调度做了下整理. UCOS有两种调度器,一种是任务级的调度器,一种是中断级的调度器.任务级的调度器由OS ...
- 51单片机中使用ucos ii的优缺点(好文)
摘要:近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题.本文通过对一种源码公开的嵌入式实时操作系统ucos ii的分析,以51系列单片机为例,阐述了在单片机中使用该嵌入式操作系统的优 ...
- 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...
- IAR中移植UCOS II系统以及sourceInsight 使用
ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...
- Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点
Vxworks.QNX.Xenomai.Intime.Sylixos.Ucos等实时操作系统的性能特点 VxWorks操作系统 VxWorks 操作系统是美国WindRiver公司于1983年设计开发 ...
- wince系统改安卓系统_什么是实时操作系统(RTOS)
在维基百科上,实时操作系统(RTOS)的定义如下: 实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行.管理系统资源,并为开发应用程序 ...
- lwip协议栈在linux运行,LwIP协议栈在uCOS II下的实现
1.概述: LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件.OS.编译器相关的部份独立出来,放在ucosii&LwIPsource etlwiparch目录下.因此LwIP在 ...
最新文章
- 基于Spark ALS算法的个性化推荐
- linux下fdisk分区工具的使用
- 构建安全的Xml Web Service系列之初探使用Soap头
- mpvue 微信小程序 Image 图片实现宽度100%,高度自适应
- 十四、MySQL函数相关知识总结(简单易懂)
- 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
- c语言多线程详,如何用C语言实现多线程
- 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具
- Photoshop 入门教程「8」如何使用裁剪工具?
- [Bootstrap]7天深入Bootstrap(1)入门准备
- GB/T 7714-2005《文后参考文献著录规则》(精简)
- Java调用so文件
- 8个免费、高质量PPT素材网站,值得收藏
- 芝加哥大学计算机博士年薪,2020年芝加哥大学博士含金量
- Timer和counter
- oracle 按时间每五分钟分割,Oracle 5分钟或30分钟分割方法
- python西瓜视频UP主所有视频封面下载
- require(‘inquirer‘)报错
- Vue计算属性、监视属性
- 北京两男子开黑客论坛提供教程,涉嫌非法利用信息网络罪被抓
热门文章
- OriginPro 2021 for win 科学绘图软件最新版 中英文 完美稳定附下载安装使用教程
- python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr
- 音频处理九:(参数估计)
- 用python实现结构体数组
- java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...
- 基于Visual Studio2010与.NET 4.0--多显示器支持使开发效率事半功倍
- MFC对话框中的工具栏、状态栏设计小结
- SQLite学习手册(索引和数据分析/清理)
- 计算机辅助相关论文,关于计算机辅助教学的论文
- mysql数据库 日志类型_MySQL中的日志类型(一)-摘要和日志的共同特征