历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2019年10月28日 | AVR128_uC/OS-II 移植代码

2019-10-28 来源:51hei

开发平台: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初始化         

推荐阅读

史海拾趣

EVER-WAY公司的发展小趣事

在电子产品制造行业,品质是企业的生命线。EVER-WAY公司一直高度重视品质管理,建立了完善的质量管理体系。公司从原材料采购、生产制造到产品检验等各个环节都严格把关,确保产品质量的稳定性和可靠性。同时,公司还加强了对员工的培训和教育,提高了员工的品质意识和操作技能。这些品质管理的提升不仅保证了公司产品的优良品质,也赢得了客户的信任和好评。

Electrocube Inc公司的发展小趣事

在稳固国内市场的同时,Electrocube Inc公司积极开拓国际市场。公司参加了多个国际电子展会,与全球知名电子企业建立了广泛的合作关系。通过不断的市场拓展,Electrocube Inc公司的产品已经远销欧美、亚洲等多个国家和地区,实现了跨越式的发展。

EMC Component Group公司的发展小趣事

作为一家有社会责任感的企业,Electrocube Inc公司始终关注环保问题。公司积极采用环保材料和生产工艺,减少生产过程中的污染排放。同时,公司还积极参与环保公益活动,推动电子行业的绿色发展。这种对环保的关注和践行,使得Electrocube Inc公司在业界树立了良好的形象。

Changzhou Galaxy Century Microelectronics Co.,Ltd公司的发展小趣事

银河微电自成立之初,便专注于半导体分立器件的研发与生产。面对国内外市场的激烈竞争,公司坚持自主创新,不断投入研发力量,终于在某关键技术上取得了重大突破。这一技术突破不仅提高了产品的性能,还降低了生产成本,使得银河微电的产品在市场上更具竞争力。凭借这一技术优势,银河微电逐渐在行业中树立起了自己的地位。

Calmos Systems Inc公司的发展小趣事

Calmos Systems Inc公司注重企业文化建设和团队建设。公司倡导创新、协作、务实的企业文化,鼓励员工敢于尝试、勇于创新。同时,公司还注重员工的培训和发展,为员工提供广阔的职业发展空间和晋升机会。在团队建设方面,公司定期组织各类团建活动,增强员工之间的凝聚力和向心力。这些举措使得公司拥有一支高效、团结、富有创造力的团队,为公司的发展提供了有力保障。

以上便是关于Calmos Systems Inc公司在电子行业里发展起来的5个相关故事。这些故事展示了公司在创立初期、技术创新、市场拓展、国际化战略以及企业文化与团队建设等方面的努力和成果,为公司的发展奠定了坚实的基础。

Galaxy Microelectronics公司的发展小趣事

江苏飞翼智能科技有限公司在无人机航模领域也有着深厚的积累。公司不仅自己购买零件组装各类航模,还积极参与国内航模比赛,凭借良好的飞机性能和一流的操控技术取得了不俗的成绩。尤其是涡喷航模,作为中高级的航模产品,其高难度的特技动作展示了飞翼智能在无人机技术方面的深厚功底。这些经验积累和技术创新为飞翼智能向无人机应用型企业转型奠定了坚实基础。

问答坊 | AI 解惑

protel 2004安装与教程

这个我还没下,不过应该不错的,要的话去下下看,是个BT种子…

查看全部问答>

电子工程师创新设计必备宝典系列之FPGA开发全攻略免费下载

;P ;P !从本网站挪过来的资料! 为了响应小杰关于FPGA入门资料编写号召,特此发此贴,提供下载。 书还没看,感觉还不错,要求FPGA有点入门的。 关于学习FPGA,首先是自己有开发板,然后,就是自己给自己立一个项目练习。这样自己会编写代码。 ...…

查看全部问答>

AD采集的数据在12232上显示?

AD采集的数据在12232上显示 ,看看我的源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit led1=P2^3;  //led端口定义sbit led2=P2^4;sbit led3=P2^5;s ...…

查看全部问答>

ce6 eboot中内存读写测试!

在eboot中也不能使用物理地址直接访问内存。而使用的是虚拟地址。 我的6410版,RAM从128M升级到256M之后,系统一直没有搞定,在eboot中测试内存发现, 我映射了一段并不存在的内存到0x96000000,在eboot中写了一个循环读写,如下: for (i = 0; ...…

查看全部问答>

请问个win下PCI驱动开发的问题,我该补什么?

现在公司准备做Win下的PCI设备的驱动, 以前从未接触过这样的项目, 老大让我先收集资料, 请问我该补哪方面的钙? 就是那种很普通的数据采集卡,AD转换卡 硬件平台:普通PC. 软件平台:win xp,2k ps: 我只做过dos+工控机平台的板卡程序,,就是那种 ...…

查看全部问答>

注册表项[HKEY_LOCAL_MACHINE\SOFTWARE\Apps]下有许多子项,如何将它们一一读出?

在WinCE上, 注册表项 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Apps]下有许多子项, 如何将它们一一读出?…

查看全部问答>

高通6085CDMA2000上网卡研究

本工作室提供EVDO无线上网卡方案的开发,有意合作的请联系qq:764918953…

查看全部问答>

请教串口设备主动发送的数据如何获取。。我是新手

我第一次接触串口开发,很多不明白的地方。 现在手头有一设备,类似读卡器,是USB口的,装完驱动后会生成一对应的COM口。 刷卡的时候,这个外界设备会向连着的主机程序发送一串ASCII字符,我该如何获得这些数据呢? 我用超级终端链接这个COM口, ...…

查看全部问答>

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀?

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀? 三星6410(或BSP上)有这个东西吗? 如何设置它?…

查看全部问答>

STM8总是出现这幅画面

                                 …

查看全部问答>