NIOS2随笔——uCOS-II实时操作系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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",具体代码如下:

#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的博客” 博客,请务必保留此出处http://shugenyin.blog.51cto.com/4259554/1970272

以上是关于NIOS2随笔——uCOS-II实时操作系统的主要内容,如果未能解决你的问题,请参考以下文章

NIOS2随笔——FAT32文件系统

NIOS2随笔——JPEG解码与VGA显示

NIOS2随笔——JPEG图片的UART传输显示

(转载)uCOS-II的嵌入式串口通信模块设计

uCos-II内存管理

uCOS-II简介及移植uCOS-II到STM32F103平台详细步骤