1
实验五 uc/OS-II 实时操作系统在 Nios II 中的运行
一. 实验目的:了解在 NIOSII 中使用 uc/OSII 实时操作系统的基本方法。
二. 实验说明:
uc/OS-II 已经在世界范围内得到广泛的使用,包括手机、路由器、集线器、
不间断电源、飞行器、医疗设备及工业控制等。实际上,uc/OS-II 已经通过了非
常严格的测试,并且得到了美国航空航天管理局(FAA)的安全认证,可以用
于飞机、航天器等与人性命攸关的控制系统中1。因此,uc/OS-II 在工业等实时
性需求比较强的领域应用非常广泛,我们的学习套间提供了在 NiosII 系统中运
行 uc/OS-II 的例子(“ucosII_test”),该例子定义了两个任务:Task1 和 Task2,
两个任务交替执行。例子虽然简单,但可以作为 uc/OS-II 在 NiosII 系统中运行
的演示。同学们可以参考 NiosII 的软件开发手册以及 uc/OS-II 的发明人——Jean
J. Labrosse 的著作“MicroC/OS-II The Real-Time Kernel”(Second Edition)的中译
本《嵌入式实时操作系统 uc/OS-II》(第二版,邵贝贝等译),研究和设计出功能
更强、更符合实际应用的程序。
一、 参考前面的方法建立一个工程软件工程;
二、 打开工程的.syslib 工程属性,按下图所示修改编译属性:
在“System Library Contents”的“RTOS:”下拉框选择“MicroC/OS-II”,
以及右边的程序段都选择 SDRAM,因为使用了操作系统,内部 ram 比较小会
容不下,在这里我们选择 SDRAM 作为 uc/OSII 的运行环境。
MicroC/OS-II 的各个选项的配置可以通过点击“RTOS Options…”按钮进
行选择和配置,如下图所示:
1 《嵌入式实时操作系统 uc/OS-II》(第二版)
中国电子前沿站 http://www.emb-cn.com
2
具体操作和配置按照需要和参考 ALTERA 的软件开发手册。本例子采用默
认配置。
三、 做完这些配置后,就可以添加程序了,例如,我们这个例子创建了两个
任务,这两个任务交替运行:
#include
#include "includes.h"
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
#include "lcd_1602.h"
/* 定义任务堆栈大小*/
#define TASK_STACKSIZE 2048
OS_STK task1_stk[TASK_STACKSIZE];
OS_STK task2_stk[TASK_STACKSIZE];
/* 定义任务的优先级 */
#define TASK1_PRIORITY 1
#define TASK2_PRIORITY 2
中国电子前沿站 http://www.emb-cn.com
3
/* 任务 1 运行,然后阻塞 3 秒钟,切换到其它任务 */
void task1(void* pdata)
{
alt_u8 led;
while (1)
{
led = 0x1;
*(unsigned int *)PIO_LED_BASE = led;
initialcd();
displaystring(0x80,"SOC:HelloWorld!");
displaystring(0xC0,"Task1 Running...");
printf("Task1 Running...@@@@@@@@@@@@@@@ \n");
OSTimeDlyHMSM(0, 0, 3, 0);
}
}
/*任务 2 运行,然后阻塞 3 秒钟,切换到其它任务
void task2(void* pdata)
{
alt_u8 led;
while (1)
{
led = 0x2;
*(unsigned int *)PIO_LED_BASE = led;
initialcd();
displaystring(0x80,"uc/OS-II--Demo!");
displaystring(0xC0,"Task2 Running...");
printf("Task2 Running...$$$$$$$$$$$$$$$ \n");
OSTimeDlyHMSM(0, 0, 3, 0);
}
}
/* main 函数建立 2 个任务,然后启动内核,操作系统即转入运行内核 */
int main(void)
{
OSTaskCreate(task1, NULL, (void *)&task1_stk[TASK_STACKSIZE-1],
TASK1_PRIORITY);
OSTaskCreate(task2, NULL, (void *)&task2_stk[TASK_STACKSIZE-1],
TASK2_PRIORITY);
OSStart();
return 0;
}
结论:从本例可以看出,在 NiosII 中运行 uc/OSII 并不难,关键是实际应用中
如何建立正确的任务,以及各个任务如何调度等等,这些内容建议仔细参考《嵌
入式实时操作系统 uc/OS-II》等相关书籍。
中国电子前沿站 http://www.emb-cn.com
4
实验六. 学习开发套件 V3.0 中嵌入 Uclinux 的步骤和方法
在学习开发套件 V3.0 中嵌入 Uclinux 的步骤和方法,硬件系统为
EP1C6,2Mflash,8Msdram.
开发环境:SOPC 学习开发套件 V3.0,型号 EP1C6。QII5.1+SP2,NiosII
IDE5.1+SP1。
一 .安装 nios2linux 开发包 nios2linux-1.4
二 .建立硬件系统
1. QII 中建一工程 linux_nios,并添加 NIOSII CPU,QII 工程和平常的建
立并没有什么区别,只要得加上 flash 和 sdram,因为这里只是对 linux 的
简单调试,所以 SOPC 中只添加 LED 和 UART 等几个简单外设。如下图:
2.
注意为防止不必要的麻烦,这里尽量使用默认名字。
如果想用 USB 连接电脑,在 QII 中把串口连接到 USB 线的 IO 管脚上即可。
我们的工程中是两个口都接了,使用串口或者 USB 口都行。
三.建立软件环境
打开 NIOSII IDE。
3.1 建立 linux 内核
file-> new-> project 后如下图:
中国电子前沿站 http://www.emb-cn.com
5
注意:在安装 Microtronix_uclinux_nios2 开发包后在 IDE 中分增加出如上图
的 Microtronix NiosII 选项如果没有可以按下面方法解决:
1)、打开 cmd,在 开始->运行 那里输入 cmd
2)、cd 到你的 NiosII 的工作目录下面,我的 NiosII 安装在 D 盘,如下:
中国电子前沿站 http://www.emb-cn.com
6
3)、在这里输入命令 nios2-ide.exe –clean,进入 NiosII IDE 的 clean 模
式,选择 workspace:
这是在 New->Other 那里你就可以看到那个 linux 的目录项了。关了 IDE 窗
口和 cmd 窗口,这样就可以正常看到 Microtronix_linux 了。
中国电子前沿站 http://www.emb-cn.com
7
3.2 输入内核名字
按 next:
finish 完成
四. 构建内核:
4.1 右键内核名,在弹出菜单中选择 Configure Kernel 如下:
中国电子前沿站 http://www.emb-cn.com
8
后进入如下界面:
因为 flash 只有 2M 因此构造的内核应尽可能的小,其大小不能超过 1M。因此在
这里要去掉没用到的选项:
按空格键 取消或者选择
General setup:
中国电子前沿站 http://www.emb-cn.com
9
processor type and features:这里
support,不是 Altera
在 Device drivers 除以下默认及保留串口外,其它都去掉
Generic Driver Options --->
Memory Technology Devices (MTD) --->
Block devices --->
串口位置及设置如下:
Device drivers--ÆCharacter devices --->Serial drivers --->:
设置完这里后其它便可使用默认,然后 esc 退出保存。
中国电子前沿站 http://www.emb-cn.com
10
4.2 修改两个脚本文件
D:\altera\kits\nios2_51\bin\eclipse\plugins\com.microtronix.nios2lin
ux.kernel_1.4.0\linux-2.6.x\arch\nios2nommu\kernel\ vmlinux.lds.inc文
件以及同目录下的 vmlinux.lds.S 文件 稍作修改以占用更少的空间:
在
D:\altera\kits\nios2_51\bin\eclipse\plugins\com.microtronix.nio
ux.kernel_1.4.0\linux-2.6.x\drivers\mtd\maps\ 中找到 microtronix.c 文
件
修改以下画线部分如下图:
中国电子前沿站 http://www.emb-cn.com
11
五..完成后编译内核:
经过相当长时间的等待便可看到编译生成的内核 vmlinux.bin 二进制文件:
中国电子前沿站 http://www.emb-cn.com
12
六.用 flash programer 下载此内核到 flash 中的从 0 地址开始:
七.建立文件系统:
7.1 在 IDE 中 File->new->project
Next 输入名字:
继续 Next:
中国电子前沿站 http://www.emb-cn.com
13
NEXT:点击 Install Minimal:
Finish 后有警告,不管,确定后完成。
7.2 编译此文件系统后生成 romfs.bin 文件,同上面烧写内核的方法,把此
文件烧写到 flash 中去,注意 offset 地址为:0x100000
此图中我把 romfs.bin 文件拷到了 C 盘,所以 file 中是:c:\romfs.bin
中国电子前沿站 http://www.emb-cn.com
14
八.ok
下载成功后,接上 USB (或者串口),打开串口调试工具,按一下板子上的 reset
键后可看到串口工具接收窗中显示如下信息:linux 系统便启动成功了。
输入命令:ls bin
中国电子前沿站 http://www.emb-cn.com
15
九.建一个 LED 闪动程序。
9.1 在 IDE 中 File->New->project:
一路 next 到 finish.
9.2. 建一个 C 文件:
在弹出的对话窗输入文件名:hello.c 注意要加.c 后缀:
中国电子前沿站 http://www.emb-cn.com
16
9.3 把…altera/kits/nios2/examples/software/linux/apps 目录下
samples/hello 文件夹里的 makefile 复制到 my_app 工程下。
注意:makefile 文件的选择是有讲究的。具体请参阅:在目录
..altera\kits\nios2_51\documents\linux\ 下的 Linux Reference Guide.pdf
文档第 19 页。
在 hello.c 中输入以下程序:
#include
main()
{
int i;
char led=0x1;
while(1)
{
for(i=0;i<100000;i++);
* (int*) 0x80202040=led; //0x80202040是led灯的地址
led=~led;
}
}
说明:其它外面地址在内核工程 nios2_system.h 中定义,如下图
中国电子前沿站 http://www.emb-cn.com
17
9.4 右键 my_app 工程:选择如下图:
在弹出以下对话窗:
点 Ceate 完成。
中国电子前沿站 http://www.emb-cn.com
18
9.5.右键 my_app 工程:选择如下图:开始编译程序。
9.6 编译完成后没问题的话就可生成 hello.exe 运行文件:
中国电子前沿站 http://www.emb-cn.com
19
9.7.把生成的 hello.exe 文件复制到文件系统目录下的 BIN 文件夹,如下图:
9.8.编译此文件系统:
9.10.最后把生成的文件系统 romfs.bin 用 flashprogramor 下载到 flash 中。
方法和上面烧写文件系统到 flash 相同。
十.于是我们便完成了整个 linux 的移植和简单开发过程。
运行结果:
插好 USB 线,打开串口调试工具,按一下 reset:
输入 ls bin 回车。
中国电子前沿站 http://www.emb-cn.com
20
输入 hello 回车
此时便可看到核心板上两个 LED 交替闪动。
结论:可见,在 NiosII 中移植 ucLinux 并不难,关键是人的 ideal,即用它来
实现什么功能呢?那就是您来发挥的时候了,呵呵,努力!
中国电子前沿站 http://www.emb-cn.com
本文档为【NiosII下UCOS和移植Linux教程(中文)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。