uCOS-II模拟(VS2010&WIN32)
转自http://www.amobbs.com/thread-5462878-1-1.html
自学uCOS-II源码,在论坛上上看到大神在WIN7 Visual Studio 2010环境下调试uCOS-II 2.91。故转载过来跟着调试学习。
1. 下载uCOS-II 2.91
官方下载地址:http://micrium.com/page/downloads/source_code
方便调试而修改后的源码地址:http://www.amobbs.com/forum.php?mod=attachment&aid=MjM0MXw3N2I5NGNlMHwxMzUyNTY5MTAyfDE4MDg2MHw1NDYyODc4
2. 下载WIN32 移植代码
虽然官方提供了WIN32的移植代码,但是这个版本的代码只能支持比较简单的范例,类似外部中断,动态优先级转换等功能没有进行移植,应外官方移植支持的ucOS-ii的版本也比较低。官网x86 Win32 Simulator
所以本人采用了德国Hochschule Esslingen 大学Zimmermann教授的WIN32移植版本。该版本支持到uCOS-ii 2.84.经过少量修改后可支持最新的uCOS-ii 2.91. 此外该移植使用软件中断仿真外部中断。这个版本具体介绍参见 Zimmermann教授的网站。
我自己稍加修改的的移植源文件WIN7 PORT.zip。
3. 下载例程
Zimmermann的移植包含了6个例程。 这六个例程的源代码App.zip。
Zimmermann教授移植和范例地址
4. 新建VC2010工程
新建Win32 Console Application, 如图1所示:
Application Settings 选择 Console Application,取消掉Pre-complied Header,再选择Empty Project。 如图2所示:
为了方便起见,以如图3方式安排源文件,(根据需要可以自己安排自己的目录)
App目录下存放例程文件: app_cfg.h; INCLUDE.h; OS_CFG.h; Test.h.
Port目录下存放移植文件: PC.h.h, PC.c, os_cpu.h和os_cpu.c四个文件。
Source目录下存放uCOS-ii 2.91的内核文件。
将这些文件加入到工程的Source Files分类下。
在工程的property窗口,设置 General -> Character Set -> Use Multi-byte Character Set.
C/C++ -> General -> Additional Include Directories 分别加入App,Port和source目录。
Linker -> Input -> Additional Dependencies 加入winmm.lib (关于时钟的win api)
由于Zimmermann的例程是基于uCOS 2.84的,为了使用2.91版本, 需要在OS_CFG.h中加入新的配置选项
#define OS_FLAG_NAME_EN 1u /* Enable names for event flag group */
#define OS_MEM_NAME_EN 1u /* Enable memory partition names */
#define OS_APP_HOOKS_EN 0u /* Application-defined hooks are called from the uC/OS-II hooks */
#define OS_EVENT_MULTI_EN 1u /* Include code for OSEventPendMulti() */
#define OS_TASK_NAME_EN 1u /* Enable task names */
#define OS_TASK_REG_TBL_SIZE 1u /* Size of task variables array (#of INT32U entries) */
为了能够成功编译,需要注释掉 ucos_ii.c文件中
#include <os_core.c>
#include <os_flag.c>
#include <os_mbox.c>
#include <os_mem.c>
#include <os_mutex.c>
#include <os_q.c>
#include <os_sem.c>
#include <os_task.c>
#include <os_time.c>
#include <os_tmr.c>
另外因为uCOS-ii在windows的移植上,无法合理计算idleTask的counter数,所以当OS_TASK_STAT_EN使能后,无法进行统计任务(1/10秒的时候OSIdleCtrMax的值比100还小)。所以通过修改os_core.c中如下行:
注释掉:
OSIdleCtrMax /= 100uL;
将 :
OSCPUUsage = (INT8U)(100uL - OSIdleCtrRun / OSIdleCtrMax);
改为:
OSCPUUsage = (INT8U)(100uL - OSIdleCtrRun * 100 / OSIdleCtrMax);
这样修改后,Example 3就可以顺利运行。
最后对于Example0, 模拟中断,Zimmermann提供了中断发生的程序。 (注意,如果编译这个源文件irqGenerator.c, 也需要设置Character Set -> Use Multi-byte Character Set.
中断下载
参考网站:
http://www2.hs-esslingen.de/~zimmerma/software/index_uk.html
http://embedded-tips.blogspot.ca/2010/02/running-pc-utility-for-ucos-ii-with.html
uCOS-II模拟(VS2010&WIN32)的更多相关文章
- DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
DE1-SOC开发板上搭建NIOS II处理器运行UCOS II 今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...
- ucos ii 46个系统API函数解析
源: ucos ii 46个系统API函数解析
- FreeRTOS 和uCOS II的简单比较
转载:http://www.viewtool.com/bbs/forum.php?mod=viewthread&tid=114 这是两种RTOS, 现在粗略比较一下. freeRTOS比uCO ...
- VS2010 Win32项目的源码位置设置
在VS2010中,我们可以创建一个Win32项目用来编辑C或CPP代码,项目建好后我们向项目文件夹添加代码文件,并调试能正常运行. 有时候我们会发现项目目录下没有源文件,这种情况下,可以通过设置“输出 ...
- hdu_5831_Rikka with Parenthesis II(模拟)
题目链接:hdu_5831_Rikka with Parenthesis II 题意: 给你一些括号的排列,必须交换一次,能不能将全部的括号匹配 题解: 模拟一下括号的匹配就行了,注意要特判只有一对括 ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- 汉诺塔问题II(模拟)
汉诺塔问题II Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1556 Solved: 720 Description 汉诺塔(又称河内塔)问题是源于 ...
- VS2010 win32项目windows窗体程序 向导生成代码解析
目录: 1.Win32项目的windows窗体程序的向导生成了如下代码 2.手工生成代码如下 3.当消息队列中没有消息需要处理,我们可以利用这段时间处理我们自己的任务 1.Win32项目的window ...
- vista x64 vs2010 win32添加资源 未能完成操作解决办法
非常痛苦的感觉,不能用vc6,msdn library也不好用,去2k3系统试了下,没有任何问题,无奈想重装系统了,但是太浪费时间,装了虚拟机也是vistax64的,安装之后正常... 卸载重新安装依 ...
随机推荐
- PHP简单留言板
<?php header("Content-Type:text/html;charset=utf8"); $filename = "message.txt" ...
- uva 11178二维几何(点与直线、点积叉积)
Problem D Morley’s Theorem Input: Standard Input Output: Standard Output Morley’s theorem states tha ...
- 【HDOJ5948】Thickest Burger(签到)
题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...
- hdu 4778 Gems Fight! 状压dp
转自wdd :http://blog.csdn.net/u010535824/article/details/38540835 题目链接:hdu 4778 状压DP 用DP[i]表示从i状态选到结束得 ...
- android获取手机号
private String getPhoneNum(){ //与手机建立连接 TelephonyManager tm = (TelephonyManager)getSystemService(Con ...
- Netty构建游戏服务器(三)--netty spring简单整合
一,基本方法 上节实现了netty的基本连接,这节加入spring来管理netty,由spring来开启netty服务. 在netty服务器中,我们建立了三个类:HelloServer(程序主入口) ...
- PAT (Advanced Level) 1086. Tree Traversals Again (25)
入栈顺序为先序遍历,出栈顺序为中序遍历. #include<cstdio> #include<cstring> #include<cmath> #include&l ...
- Django 中的时间处理
操作系统为OS X 10.9.2,Django为1.6.5. 1.时区 在setting.py文件中设置了时区 TIME_ZONE = 'Asia/Shanghai' # 设置时区为UTC+8 USE ...
- STM32调试问题
1.JLINK V8 error:flash download failed - could not load file: Options for Target 'Targer 1'下的菜单下Outp ...
- 修复OS X的Finder中文档 打开方式中重复程序的问题
如上图,OS X在使用一段时间后,有些软件就会重复注册打开方式,对于有洁癖的人,这是难以接受的事. 不过有个命令可以很简单的把重复项给去掉. /System/Library/Frameworks/Co ...