在VS2008中移植uCOS-II

来源:互联网 发布:base64.js 怎么解码 编辑:程序博客网 时间:2024/05/16 06:21

在VS2008中移植uCOS-II

目的:我也是初学者,只为初学者建立环境,大家一起学习

参考资源:所有相关资源已经上传到CSDN下载版块http://download.csdn.net/detail/xiahouzuoxin/4389537

1、新建工程

2、拷贝uCOS-II文件夹到工程目录下;

将“..\uCOS-II\Other_Headers”下的“include.h”和“SystemConfig.h”两个头文件剪切到..\uCOS_Demo\uCOS_Demo目录下;

3、配置工程

  在工程上单击右键“属性”,弹出uCOS_Demo属性页对话框。

1)附加包含目录配置

2)编译代码类型配置为C代码

3)添加依赖项”WinMM.lib”

4、在工程中添加源文件

5、编译试试,出现如下Error

1>ucos_ii.obj : error LNK2019: 无法解析的外部符号_OSDebugInit,该符号在函数_OSInit 中被引用

这是由于OSDebugInit没有定义导致,因此在os_trace.c中添加如下代码

/* 移植时所需定义*/

void OSDebugInit()

{

}
6、再编译工程试试,OK

7、创建3个任务:MianTask、App1Task、App2Task

(1)“SystemCOnfig.h”代码如下:

#ifndef SYSTEM_CONFIG_H

#define SYSTEM_CONFIG_H

 

#define _CRT_SECURE_NO_WARNINGS

 

#include <stdio.h>

#include <assert.h>

#include <includes.h>

 

/*

*********************************************************************

*                         TASK PRIORITIES

*********************************************************************

*/

 

#define MainTask_Prio               5

#define App1Task_Prio               7

#define App2Task_Prio               9

 

/*

*********************************************************************

*                         TASK STACK SIZES

*********************************************************************

*/

 

#define MainTask_StkSize            1024

#define App1Task_StkSize            1024

#define App2Task_StkSize            1024

 

#define OS_TASK_TMR_PRIO        65533

#define OS_IDLE_PRIO            OS_TASK_IDLE_PRIO

#define OS_STAT_PRIO            OS_TASK_STAT_PRIO

 

/*

*********************************************************************

*                         TASK

*********************************************************************

*/

extern void MainTask(void *p_arg);

extern void App1Task(void *p_arg);

extern void App2Task(void *p_arg);

 

#endif

(2)“uCOS_Demo.cpp”代码如下

//uCOS_Demo.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"

#include "SystemConfig.h"

 

/* 定义堆栈*/

OS_STKMainTask_Stk[MainTask_StkSize];

OS_STKApp1Task_Stk[App1Task_StkSize];

OS_STK App2Task_Stk[App2Task_StkSize];

 

int _tmain(int argc, _TCHAR*argv[])

{

    OSInit();  /* 系统初始化*/

 

    /* 创建主任务*/

    OSTaskCreate(MainTask, (void *)0,&MainTask_Stk[MainTask_StkSize-1], MainTask_Prio);

 

    OSStart();  /* 开始任务调度*/

 

    return 0;

}

 

/* 主任务*/

void MainTask(void *p_arg)

{

    p_arg = p_arg;

 

    OSStatInit();  /* 统计任务初始化*/

    while(1)

    {

       /* 创建其他任务*/

       OSTaskCreate(App1Task, (void*)0, &App1Task_Stk[App1Task_StkSize-1], App1Task_Prio);

       OSTaskCreate(App2Task, (void*)0, &App2Task_Stk[App2Task_StkSize-1], App2Task_Prio);

       OSTimeDlyHMSM(0,0,1,0); /* 任务调度*/

       //OSTaskDel(MainTask_Prio);  /* 删除主任务*/

    }

}

 

/* App1Task */

void App1Task(void *p_arg)

{

    p_arg = p_arg;

 

    while(1)

    {

       printf("Hello,I am PC!\n");

 

       OSTimeDlyHMSM(0, 0, 1, 0); /* 任务调度*/

    }

}

 

/* App2Task */

void App2Task(void *p_arg)

{

    p_arg = p_arg;

 

    while(1)

    {

       printf("Hello,uCOS-II!\n");

 

       OSTimeDlyHMSM(0, 0, 2, 0); /* 任务调度*/

    }

}

运行结果如下

【注】所有移植过程过程参考网上资源

0 0
原创粉丝点击