AVR128_uC/OS-II 移植代码

发布者:灵感发电站最新更新时间:2019-10-28 来源: 51hei关键字:AVR128  OS-II  移植代码 手机看文章 扫描二维码
随时随地手机看文章

开发平台:AVR128 

移植系统:uC/OS-II
功能:  系统建立两个任务,操作“8个LED”  以及 “蜂鸣器”(附上LED和蜂鸣器 部分的原理图)

代码量少,添加了个人注释,容易理解

电路原理图如下:
 

此工程为TS8900-M128开发板uCOSii移植教程代码

功能是
    1--8个LED进行“亮-灭”操作
    2--控制蜂鸣器“响-不响”操作

单片机源程序如下:

/*

***********************************Copyright(c)*****************************

*                                                                            

*                                                         All Rights Reserved

*                                             

*

*---------------------------------File Info---------------------------------

*File Name             : main.c

*Descriptor            : 主程序

*Create By             : 

*Create Date           : 2008-9-26

*Version               : V1.0

*Note                     :

*

*---------------------------------------------------------------------------

*Modified By          :

*Modified Date  :

*Version        :

*Note                     :

*

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

*/

#define _IN_MAIN_

#include "config.h"


#define                          OS_TASK_MAIN_STK_SIZE                                 200

#define                          OS_TASK_MAIN_HARD_STK_SIZE                            40 

#define                          OS_TASK2_STK_SIZE                                         200

#define                          OS_TASK2_HARD_STK_SIZE                                    40


OS_STK                          TaskMainStk[OS_TASK_MAIN_STK_SIZE];

OS_STK                          Task2Stk[OS_TASK2_STK_SIZE];

void*                                MainMsg[16];


/***************************************************************************

*Function Name                :OSTickISRInit        

*Description        :系统时钟初始化

*Input parameters   :

*Return Values:           :

*Global Variables         :

*Calling Modules          :

***

*Create By                      :

*Create Tate                 :2008-9-26

***

*Modified By                  :

*Modified Date            :

*Note                              :

****************************************************************************/ 

void OSTickISRInit(void)

{

    TCNT0 = 0x00;//将“定时计数器0”清零

    OCR0 = TCNT0_INIT;// “OCR0”为“输出比较寄存器0”

    TCCR0 = TMC8_CK128;// “TCCR0”为“定时计数器0的控制寄存器”  WGM01 = 3 ;CS02 = 2 ; CS00 = 0 ;  BIT(x)        (1 << (x)) ,即有TCCR0 = (1<<3)|(1<<2)|(1<<0) ,

                                           // --设定“CTC--匹配时清楚定时计数器”模式、“COM01- COM00--正常端口操作”、“CS02-CS01-CS00--时钟选择位定义为系统时钟128分频”


        TIMSK = BIT(OCIE0);// “TIMSK-定时计数器中断屏蔽寄存器”;“OCIE0 = 1” ;使能“定时计数器0” 的输出比较匹配中断。

}

/***************************************************************************

*Function Name                :MainTask        

*Description        :主线程任务

*Input parameters   :

*Return Values:           :

*Global Variables         :

*Calling Modules          :

***

*Create By                      :

*Create Tate                 :2008-9-26

***

*Modified By                  :

*Modified Date            :

*Note                              :

****************************************************************************/ 

void Task2(void* pData);



/***************************************************************************


“主任务”的主要“任务代码”



****************************************************************************/ 

void MainTask(void* pData)

{        

        uint8 byTemp = 0xff;

    pData = pData;

        DDRA = 0xff;// --GpioA引脚方向为“输出”

        DDRE = 0xff;// --GpioE引脚方向为“输出”

    OSTickISRInit();// --系统时钟初始化

        

        OSTaskStkSize     = OS_TASK2_STK_SIZE;// --为第二个任务配置“堆栈大小”以及“硬件堆栈大小”       

    OSTaskHardStkSize = OS_TASK2_HARD_STK_SIZE;  

        

    OSTaskCreate(Task2, (void*)0, (OS_STK*)&Task2Stk[OS_TASK2_STK_SIZE - 1], 1);// --建立“次任务”,优先级为1

        

        while(TRUE) 

    { 

            byTemp = ~byTemp;// --将定义的字节取反,用于对LED输出相反的电平,即“亮-灭”

               PORTA = byTemp;// --将值从GpioA 发送出去

                PORTE = 0x00;// --将74HC573的“LE-锁存引脚”拉低,将数据填到74HC573的寄存器中

                PORTE = 0xff;// --将“LE”拉高,执行直通模式

                OSTimeDlyHMSM(0, 0, 0, 600);// --执行“任务延时”,等系统执行其他“最高优先级”的任务

                                                                        //(在优先级为0的“主任务”处于等待状态”,那么当前的“最高优先级”任务就是“Task2”)

    }

}

/***************************************************************************

*Function Name                :Task2        

*Description        :

*Input parameters   :

*Return Values:           :

*Global Variables         :

*Calling Modules          :

***

*Create By                      :

*Create Tate                 :2008-9-26

***

*Modified By                  :

*Modified Date            :

*Note                              :

****************************************************************************/ 

void Task2(void* pData)

{        

    pData = pData;

        DDRG |= BIT(4);// --0x10 GpioG^4 设置为输出,控制“蜂鸣器”的引脚

        while(TRUE) 

    { 

            PORTG ^= BIT(4);

            OSTimeDlyHMSM(0, 0, 1, 0);

    }

}

/***************************************************************************

*Function Name                :main        

*Description        :主函数

*Input parameters   :

*Return Values:           :

*Global Variables         :

*Calling Modules          :

***

*Create By                      :

*Create Tate                 :2008-9-26

***

*Modified By                  :

*Modified Date            :

*Note                              :

****************************************************************************/ 

void main(void)

{

    OSTaskStkSize     = OS_TASK_STK_SIZE;// --设置堆栈的总空间      

    OSTaskHardStkSize = OS_TASK_HARD_STK_SIZE;// --设置硬件堆栈空间(AVR单片机)

    OSInit();// --uCOSII初始化         

[1] [2]
关键字:AVR128  OS-II  移植代码 引用地址:AVR128_uC/OS-II 移植代码

上一篇:SPI协议工作过程详解文档,内含实例代码
下一篇:AVR内部EEPROM读写程序-先写入数据,然后读出来,看是否一致

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved