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实时操作系统相关推荐

  1. 基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现

    基于STM32的简易示波器的UCOS II嵌入式实时操作系统实现 在基于STM32的示波器的实现的基础上,在STM32上移植UCOS II嵌入式实时操作系统. 在UCOS II操作系统中将各个功能分发 ...

  2. 实时操作系统UCOS学习笔记1----UCOSII简介

    前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核). UCOSII简介 UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Je ...

  3. 嵌入式实时操作系统μC/OS II(一)

    嵌入式实时操作系统μC/OS II 为什么要学习μC/OS-II ㈠.凡从事嵌入式系统开发工作的人,必须对嵌入式操作系统有足够的了解. ㈡.对于初学者,从μC/OS-II开始是个明智的选择. 1.μC ...

  4. 参考任哲的《嵌入式实时操作系统μC_OS-II原理及应用》,对UCOS的任务调度做了下整理。

    参考任哲的< 嵌入式 实时操作系统μC_OS-II原理及应用>,对 UCOS 的任务调度做了下整理. UCOS有两种调度器,一种是任务级的调度器,一种是中断级的调度器.任务级的调度器由OS ...

  5. 51单片机中使用ucos ii的优缺点(好文)

    摘要:近年来,在单片机系统中嵌入操作系统已经成为人们越来越关心的一个话题.本文通过对一种源码公开的嵌入式实时操作系统ucos ii的分析,以51系列单片机为例,阐述了在单片机中使用该嵌入式操作系统的优 ...

  6. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理

    uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...

  7. IAR中移植UCOS II系统以及sourceInsight 使用

    ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...

  8. Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

    Vxworks.QNX.Xenomai.Intime.Sylixos.Ucos等实时操作系统的性能特点 VxWorks操作系统 VxWorks 操作系统是美国WindRiver公司于1983年设计开发 ...

  9. wince系统改安卓系统_什么是实时操作系统(RTOS)

    在维基百科上,实时操作系统(RTOS)的定义如下: 实时操作系统(Real-time operating system, RTOS),又称即时操作系统,它会按照排序运行.管理系统资源,并为开发应用程序 ...

  10. lwip协议栈在linux运行,LwIP协议栈在uCOS II下的实现

    1.概述: LwIP协议栈在设计时就考虑到了将来的移植问题,因此把所有与硬件.OS.编译器相关的部份独立出来,放在ucosii&LwIPsource etlwiparch目录下.因此LwIP在 ...

最新文章

  1. 基于Spark ALS算法的个性化推荐
  2. linux下fdisk分区工具的使用
  3. 构建安全的Xml Web Service系列之初探使用Soap头
  4. mpvue 微信小程序 Image 图片实现宽度100%,高度自适应
  5. 十四、MySQL函数相关知识总结(简单易懂)
  6. 苏格拉底与失恋者的对话————最经典的失恋哲理 ...
  7. c语言多线程详,如何用C语言实现多线程
  8. 计算机二级mysql工具_2020年全国计算机二级MySQL复习知识点:优化工具
  9. Photoshop 入门教程「8」如何使用裁剪工具?
  10. [Bootstrap]7天深入Bootstrap(1)入门准备
  11. GB/T 7714-2005《文后参考文献著录规则》(精简)
  12. Java调用so文件
  13. 8个免费、高质量PPT素材网站,值得收藏
  14. 芝加哥大学计算机博士年薪,2020年芝加哥大学博士含金量
  15. Timer和counter
  16. oracle 按时间每五分钟分割,Oracle 5分钟或30分钟分割方法
  17. python西瓜视频UP主所有视频封面下载
  18. require(‘inquirer‘)报错
  19. Vue计算属性、监视属性
  20. 北京两男子开黑客论坛提供教程,涉嫌非法利用信息网络罪被抓

热门文章

  1. OriginPro 2021 for win 科学绘图软件最新版 中英文 完美稳定附下载安装使用教程
  2. python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr
  3. 音频处理九:(参数估计)
  4. 用python实现结构体数组
  5. java pl0 四元式,【编译原理】c++实现自下而上语法分析及中间代码(四元式)生成...
  6. 基于Visual Studio2010与.NET 4.0--多显示器支持使开发效率事半功倍
  7. MFC对话框中的工具栏、状态栏设计小结
  8. SQLite学习手册(索引和数据分析/清理)
  9. 计算机辅助相关论文,关于计算机辅助教学的论文
  10. mysql数据库 日志类型_MySQL中的日志类型(一)-摘要和日志的共同特征