• 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

  • 相关阅读:
    android 扇形菜单
    Gradle 教程:第一部分,安装【翻译】
    Android Studio 创建虚拟机失败 Failed to load 解决办法
    【翻译】Best Practices for User interface android 适配不同屏幕、不同分辨率
    [转]QT 4.8 静态库编译方法
    使用windows资源管理器打开jar
    一步步理解typedef
    模拟Chrome皮肤
    FAT12格式的引导区实现
    Android-获取Html元素
  • 原文地址:https://www.cnblogs.com/yanghong-hnu/p/5699694.html
Copyright © 2020-2023  润新知