




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一 ARM开发环境实验 一、实验目的:1. 学会如何利用ADT IDE软件建立工程和编译程序2. 学会如何下载和调试程序二、实验步骤:1. 启动ADT IDE软件,新建工程leddemo2. 新建leddemo.c文件并编辑代码如下:#define U8 unsigned charunsigned char seg7table16 = /* 0 1 2 3 4 5 6 7*/ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, /* 8 9 A B C D E F*/ 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,;void Delay(int time);/*/* 函数说明: JXARM9-2410 7段构共阳数码管测试 */* 功能描述: 依次在7段数码管上显示0123456789ABCDEF */* 返回代码: 无 */* 参数说明: 无 */*/void Test_Seg7(void) int i; *(U8*) 0x10000006) = 0x00; for( ; ; )/* 数码管从0到F依次将字符显示出来 */ for(i=0;i=0x0;i-) /* 查表并输出数据 */ *(U8*) 0x10000004) = seg7tablei; Delay (100000); /*/* Function name : 循环延时子程序 */* Description : 循环 time 次 */* Return type :void */* Argument : 循环延时计数器 */*/void Delay(int time) int i;int delayLoopCount=1000; for(;time0;time-);for(i=0;iRemote Disconnect,将实验箱上电,连接JTAG接口,点击Debug-Dowlond下载调试 实验二 uC/OS-II任务间通讯和同步实验一、实验目的1、掌握uC/OS-II操作系统下使用信号量解决任务之间的同步问题;2、掌握uC/OS-II操作系统下任务间通讯的方法。 二、实验内容1、使用信号量实现任务间同步(Eg2工程)2、使用邮箱实现任务之间的通讯(Eg3工程)三、基础知识uC/OS-II任务之间的通讯与同步方式:1、利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断2、利用函数OSSchedLock()和OSSchekUnlock()对C/OS-II中的任务调度函数上锁和开锁3、信号量4、邮箱5、队列(1)uC/OS-II中使用信号量进行任务之间同步:1、通过调用OSSemCreate()建立信号量2、通过调用OSSemPost()函数发送一个信号量3、通过调用OSSemPend()函数等待一个信号量OSSemCreate:1、Sem1 = OSSemCreate(0); 2、参数为信号量的初始计数值赋值。该初始值为0到65,535之间的一个数。 3、如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。4、如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。5、如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。 OSSemPost和OSSemPend:1、如果信号量当前是可用的(信号量的计数值大于0),将信号量的计数值减1,然后函数将“无错”错误代码返回给它的调用函数。如果信号量的计数值为0,而OSSemPend()函数又不是由中断服务子程序调用的,则调用OSSemPend()函数的任务要进入睡眠状态,等待另一个任务(或者中断服务子程序)发出该信号量。两个任务之间的同步的实现:1、创建两个信号量Sem1和Sem2,信号量Sem2初始为可用状态,而信号量Sem1初始为不可用状态。 Sem1 = OSSemCreate(0);Sem2 = OSSemCreate(1);TaskLED:void TaskLED(void *Id) INT8U Reply; for (;) OSSemPend(Sem2, 0, &Reply);/* wait for the semaphore */ OSSemPost(Sem1);/* signal the semaphore */ OSTimeDly(200);/* wait a short while */ TaskSEG:void TaskSEG(void *Id) INT8U Reply; for (;) OSSemPend(Sem1, 0, &Reply);/* wait for the semaphore */ OSSemPost(Sem2);/* signal the semaphore */ OSTimeDly(100);/* wait a short while */ 两个任务之间的同步的实现:1、任务TaskLED必须等待Sem2可用才能够继续往下运行,而Sem2在TaskSEG中发送。2、TaskSEG必须等待Sem1可用才能够继续往下运行,而Sem1在TaskLED中发送,这样就实现了程序中“”之间代码的顺序执行,而不受OSTimeDly的延时值的影响。(2)uC/OS-II中使用邮箱实现任务之间的通讯:1、邮箱可使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量2、通过调用OSMboxCreate()函数来创建邮箱,并指定指针的初始值3、如果用户用邮箱来共享某些资源,那么就要初始化该邮箱为一个非NULL的指针4、通过OSMboxPost()函数发送一个消息到邮箱5、通过OSMboxPend()函数等待一个邮箱中的消息,如果邮箱中没有可用的消息,OSMboxPend()的调用任务就被挂起,直到邮箱中有了消息或者等待超时。TaskLED:void TaskLED(void *Id)char*Msg;INT8Uerr;for (;) /* wait for a message from the input mailbox */Msg = (char *)OSMboxPend(Mbox1, 0, &err);uHALr_printf(Msg);/* print tasks id */TaskSEG :void TaskSEG(void *Id)charMsg100;INT8Uerr;int nCount = 0;for (;) /* post the input message to the output mailbox */sprintf(Msg, TaskSEG %d, nCount+);OSMboxPost(Mbox1, Msg);OSTimeDly(100);上面的代码每100个时钟节拍(1 S)从TaskSEG中发送一个字符串,在TaskLED中接收并打印出来 四、实验步骤实验A:1、观看“实验二A.avi”视频文件2、打开实验二A模板工程3、编辑Eg2.c,在TaskLED中打印字符串“TaskLED”,在TaskSEG中打印字符串“TaskSEG”,并使用信号量实现这两个字符串打印动作的顺序执行。编辑代码如下:#includeIncludes.h #include option.h#include 2410lib.h#include uhal.h/* 任务栈 */OS_STK StackLEDSTACKSIZE= 0, ; / 任务LED任务栈OS_STK StackSEGSTACKSIZE= 0, ; / 任务SEG任务栈/* 任务ID */char IdLED = 1; / 任务LED IDchar IdSEG = 2; / 任务SEG ID/* 任务处理函数 */void TaskLED(void *Id); / 任务LED任务处理函数void TaskSEG(void *Id); / 任务SEG任务处理函数/* 信号量 */OS_EVENT *Sem1; / 信号量Sem1OS_EVENT *Sem2; / 信号量Sem2/* * 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮 */void User_LED_Blink(void)static int led_status = 0;led_status += 1;if(led_status % 2 = 0)Led_Display(0x0f);elseLed_Display(0x00);/* * 数码管显示实验,由0到F依次显示 */void User_SEG_Blink(void)static unsigned char seg_value = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e ; static int seg_status = 0;*(unsigned char *)0x10000006) = 0x3e;*(unsigned char *)0x10000004) = seg_valueseg_status;seg_status += 1;if(seg_status 15)seg_status = 0;/* * 任务LED任务处理函数 * 1、OSStart调用之前创建的最高优先级任务,在该函数重启动时钟节拍定时器 * 2、等待信号量Sem2并闪烁跑马灯,然后释放信号量Sem1,并延迟2S */void TaskLED(void *Id) INT8U Reply; /* 启动时钟节拍定时器,开始多任务调度 */ ARMTargetStart(); for (;) /* 等待信号量Sem2 */OSSemPend(Sem2,0,&Reply);/* * 调用User_LED_Blink函数闪烁跑马灯,并打印TaskLED到串口 * 此部分代码为需要与另外一个任务同步的代码 */uHALr_printf(); User_LED_Blink(); uHALr_printf(TaskLED); OSSemPost(Sem1); /* 释放信号量Sem1 */OSTimeDly(20); /* * 任务SEG任务处理函数 * 1、每隔100 ticks即1000ms,闪烁数码管 * 2、等待信号量Sem1并闪烁数码管,然后释放信号量Sem2,并延迟1S */void TaskSEG(void *Id) INT8U Reply; for (;) /* 等待信号量Sem1 */ OSSemPend(Sem1, 0, &Reply);/* * 调用User_SEG_Blink函数闪烁数码管,并打印TaskSEG到串口 * 此部分代码为需要与另外一个任务同步的代码 */ uHALr_printf(); User_SEG_Blink(); uHALr_printf(TaskSEG); OSSemPost(Sem2); /* 释放信号量Sem2 */ /* 延迟1000ms */OSTimeDly(10); /* * Main函数. * 1、初始化目标系统,初始化硬件定时器等,与操作系统无关 * 2、调用OSInit初始化uC/OS-II软件数据结构等,必须在打开时钟节拍中断之前调用 * 3、创建两个信号量,Sem1和Sem2 * 4、创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG * 5、调用OSStart启动uC/OS-II */void Main(void) /* * 目标系统初始化 */ARMTargetInit(); /* * uC/OS-II软件初始化 */OSInit(); /* * 创建两个信号量,Sem1和Sem2,Sem1的初始值为0,Sem2的初始值为1,即Sem2缺省是处于释放状态 */ Sem1 = OSSemCreate(0); Sem2 = OSSemCreate(1); /* * 创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG */OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLEDSTACKSIZE - 1, 5);OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEGSTACKSIZE - 1, 13); /* * 启动多任务调度 */ OSStart(); /* * 正常情况下,永远不会执行到这里 */return; 4. 编译工程Eg2,如果出错,进行修改后再编译。5、将Eg2下载并运行,观察结果。6、修改代码,在TaskLED和TaskSEG中添加不同的延时,观察结果。7、去掉TaskLED和TaskSEG中的信号量操作,并修改延时值,观察结果。实验B:1、观看“实验二B.avi”视频文件2、打开实验二B模板工程3、编辑Eg3.c,在TaskSEG中申明一个int型变量nCount,并设置初始值为0,每隔100个时钟节拍累加一次nCount,并向邮箱中发送nCount的值,编辑代码如下:#includeIncludes.h /* uC/OS interface */#include option.h#include 2410lib.h#include uhal.h/* 任务栈 */OS_STK StackLEDSTACKSIZE= 0, ; / 任务LED任务栈OS_STK StackSEGSTACKSIZE= 0, ; / 任务SEG任务栈/* 任务ID */char IdLED = 1; / 任务LED IDchar IdSEG = 2; / 任务SEG ID/* 任务处理函数 */void TaskLED(void *Id); / 任务LED任务处理函数void TaskSEG(void *Id); / 任务SEG任务处理函数/* 邮箱 */OS_EVENT *Mbox1;/* * 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮 */void User_LED_Blink(void)static int led_status = 0;led_status += 1;if(led_status % 2 = 0)Led_Display(0x0f);elseLed_Display(0x00);/* * 数码管显示实验,由0到F依次显示 */void User_SEG_Blink(void)static unsigned char seg_value = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e ; static int seg_status = 0;*(unsigned char *)0x10000006) = 0x3e;*(unsigned char *)0x10000004) = seg_valueseg_status;seg_status += 1;if(seg_status 15)seg_status = 0;/* * 任务LED任务处理函数 * 1、OSStart调用之前创建的最高优先级任务,在该函数重启动时钟节拍定时器 * 2、等待邮箱中的消息,并打印出来 */void TaskLED(void *Id)char*Msg;INT8Uerr; /* 启动时钟节拍定时器,开始多任务调度 */ ARMTargetStart(); for (;) /* 等待邮箱中的消息,如果没有消息则挂起该任务 */Msg = (char *)OSMboxPend(Mbox1, 0, &err);/* 打印接受到的消息 */uHALr_printf(Msg);/* * 任务SEG任务处理函数 * 1、每隔100 ticks即1000ms,闪烁数码管 * 2、每隔100 ticks即1000ms,向邮箱发送一个字符串数据 */void TaskSEG(void *Id)charMsg100;INT8Uerr;int nCount = 0;for (;) /* 发送数据到邮箱 */ sprintf(Msg, TaskSEG %d, nCount+);OSMboxPost(Mbox1, Msg);/* 闪烁数码管 */User_SEG_Blink(); /* 延迟1000ms */OSTimeDly(100);/* * Main函数. * 1、初始化目标系统,初始化硬件定时器等,与操作系统无关 * 2、调用OSInit初始化uC/OS-II软件数据结构等,必须在打开时钟节拍中断之前调用 * 3、创建一个邮箱 * 4、创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG * 5、调用OSStart启动uC/OS-II */void Main(void) /* * 目标系统初始化 */ARMTargetInit(); /* * uC/OS-II软件初始化 */OSInit();/* * 创建一个邮箱 */Mbox1 = OSMboxCreate(void *)0); /* * 创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG */OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLEDSTACKSIZE - 1, 5);OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEGSTACKSIZE - 1, 13); /* * 启动多任务调度 */ OSStart(); /* * 正常情况下,永远不会执行到这里 */return; 4、在TaskLED中申明一个int型变量nCount,接收邮箱Mbox1的值放到nCount中,并通过串口打印出来。 5、编译工程Eg3,如果出错,进行修改后再编译。6、将Eg3下载并运行,观察结果。五、实验现象实验A:实验箱上跑马灯和数码管显示同时不断交替进行串口打印结果如下:实验B:实验箱上跑马灯和数码管显示同时不断交替进行串口打印结果如下: 实验三 软件定时器实验 一、实验目的 扩充uC/OS-II内核,实现软件定时器功能二、实验内容 1、实现软件定时器管理函数;2、在应用程序中添加软件定时器功能(eg_timer工程)三、基础知识软件定时器:1、软件定时器是许多操作系统提供的必备功能,它使得应用程序定时执行某一段代码。2、但是,在uC/OS-II的内核中没有提供软件定时器的功能。3、本实验采用一种简单的方法实现软件定时器功能。、软件定时器管理函数:1、在UCOS-IIIncludes.h中包含了关于软件定时器管理的相关函数的声明2、软件定时器管理函数在UCOS-IIeg_tmrOS_TIMER.c文件中实现软件定时器初始化:OSTmrInit创建软件定时器:OSCreateTimer打开软件定时器:OSEnableTimer关闭软件定时器:OSDisableTimer删除软件定时器:OSDeleteTimer软件定时器实现方法分析 :1、调用OSTmrInit函数完成定时器管理功能初始化,在该函数中将创建一个优先级为4的高优先级任务,它应该是系统中最高优先级的任务,在创建其它任务时请使用5或者过大的优先级数。这个任务每个时钟节拍都将运行,在其中检查是否有定时器就绪,如果就绪将执行相应的定时器函数,否则将进行任务调度。2、采用这种方法实现软件定时器有一个前提,就是定时器管理任务的优先级应该比任何其它应用任务优先级高,另外,这种方式实现的定时器精度有限,在本系统中,定时器精度小于10ms,且由于需要频繁进行任务切换,CPU开销较大。3、但是这种方法实现起来比较简单,而且对于一般应用已经足够,如果要求更高要求的定时器功能,可以考虑直接采用硬件定时器实现。创建定时器 :void TaskLED(void *Id) INT8U err; uHALr_printf(Task1() calledn);/* init timers */OSTmrInit();err = OSCreateTimer( &Tmr1, TmrFunc1, 1, 200, OS_TMR_ENABLE);err = OSCreateTimer( &Tmr2, TmrFunc1, 2, 200, OS_TMR_DISABLE);err = OSCreateTimer( &Tmr3, TmrFunc1, 3, 200, OS_TMR_DISABLE); for (;) OSTimeDly(100); 定时器服务函数实现:void TmrFunc1(INT8U arg) switch(arg) case 1:OSEnableTimer(Tmr2);OSDisableTimer(Tmr1);User_LED_Blink();break;case 2:OSEnableTimer(Tmr3);OSDisableTimer(Tmr2);break;case 3:OSEnableTimer(Tmr1);OSDisableTimer(Tmr3);break;四、实验步骤1、观看“实验三.avi”视频文件2、打开实验三模板工程3、编辑Eg_Timer.c,在TaskLED中创建三个定时器,并在其定时器服务函数TmrFunc1中实现定时器1,关闭定时器1,打开定时器2,并闪烁跑马灯定时器2,关闭定时器2,打开定时器3定时器3,关闭定时器3,打开定时器1 编辑原代码如下:#includeIncludes.h #include option.h#include 2410lib.h#include uhal.h/* 任务栈 */OS_STK StackLEDSTACKSIZE= 0, ; / 任务LED任务栈OS_STK StackSEGSTACKSIZE= 0, ; / 任务SEG任务栈/* 任务ID */char IdLED = 1; / 任务LED IDchar IdSEG = 2; / 任务SEG ID/* 任务处理函数 */void TaskLED(void *Id); / 任务LED任务处理函数void TaskSEG(void *Id); / 任务SEG任务处理函数/* 定时器服务函数,三个定时器公用一个定时器服务函数 */void TmrFunc1(INT8U arg);/* 定时器1、2、3 */OS_TMR *Tmr1;OS_TMR *Tmr2;OS_TMR *Tmr3;/* * 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮 */void User_LED_Blink(void)static int led_status = 0;led_status += 1;if(led_status % 2 = 0)Led_Display(0x0f);elseLed_Display(0x00);/* * 数码管显示实验,由0到F依次显示 */void User_SEG_Blink(void)static unsigned char seg_value = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e ; static int seg_status = 0;*(unsigned char *)0x10000006) = 0x3e;*(unsigned char *)0x10000004) = seg_valueseg_status;seg_status += 1;if(seg_status 15)seg_status = 0;/* * 定时器Tmr1、Tmr2、Tmr3处理函数 * 1、根据arg参数确定定时器 * 2、三个定时器同时只打开一个,即Tmr1、Tmr2、Tmr3,三个定时器总和闪烁一次跑马灯 */void TmrFunc1(INT8U arg)/* 根据arg参数处理不同的定时器 */switch(arg)/* 定时器1,关闭定时器1,打开定时器2 */case 1:OSEnableTimer(Tmr2);OSDisableTimer(Tmr1);User_LED_Blink();break;/* 定时器2,关闭定时器2,打开定时器3 */case 2:OSEnableTimer(Tmr3);OSDisableTimer(Tmr2);break;/* 定时器3,关闭定时器3,打开定时器1 */case 3:OSEnableTimer(Tmr1);OSDisableTimer(Tmr3);break;/* * 任务LED任务处理函数 * 1、OSStart调用之前创建的最高优先级任务,在该函数重启动时钟节拍定时器 * 2、创建三个定时器,定时时间都为2秒钟,它们使用同样的TmrFunc1定时器服务函数,但是使用不同的参数,定时器1的初始状态为开,其余为关 */void TaskLED(void *Id)char key_press;char led_status = 0x0; INT8U err; /* 启动时钟节拍定时器,开始多任务调度 */ ARMTargetStart(); uHALr_printf(Task1() calledn);/* 初始化定时器 */OSTmrInit();/* 创建三个定时器,定时时间都为2秒钟,它们使用同样的TmrFunc1定时器服务函数,但是使用不同的参数,定时器1的初始状态为开,其余为关 */err = OSCreateTimer( &Tmr1, TmrFunc1, 1, 200, OS_TMR_ENABLE);err = OSCreateTimer( &Tmr2, TmrFunc1, 2, 200, OS_TMR_DISABLE);err = OSCreateTimer( &Tmr3, TmrFunc1, 3, 200, OS_TMR_DISABLE);/* 该任务到此完成,不断延时 */ for (;) OSTimeDly(100); /* * 任务SEG任务处理函数 * 1、每隔100 ticks即1000ms,闪烁数码管 */void TaskSEG(void *Id) uHALr_printf(Task2() calledn); for (;) OSSchedLock();sprintf(print_buf, Task%c() turnedn, *(char *)Id); uHALr_printf(print_buf); User_SEG_Blink(); OSSchedUnlock(); OSTimeDly(100); /* * Main函数. * 1、初始化目标系统,初始化硬件定时器等,与操作系统无关 * 2、调用OSInit初始化uC/OS-II软件数据结构等,必须在打开时钟节拍中断之前调用 * 3、创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG * 4、调用OSStart启动uC/OS-II */void Main(void) /* * 目标系统初始化 */ARMTargetInit(); /* * uC/OS-II软件初始化 */OSInit(); /* * 创建两个任务,TaskLED和TaskSEG,TaskLED的优先级为5,TaskSEG的优先级为13,TaskLED的优先级高于TaskSEG */OSTaskCreate(TaskLED, (void *)&IdLED, (OS_STK *)&StackLEDSTACKSIZE - 1, 5);OSTaskCreate(TaskSEG, (void *)&IdSEG, (OS_STK *)&StackSEGSTACKSIZE - 1, 13); /* * 启动多任务调度 */ OSStart(); /* * 正常情况下,永远不会执行到这里 */return; 4. 编译工程Eg_Timer,如果出错,进行修改后再编译。5、将Eg_Timer下载并运行,观察结果。五、实验现象实验现象为每6秒钟跑马灯闪烁一次 。串口打印结果如下:实验四 多任务编程实验 一、实验目的 了解uC/OS-II中怎样创建一个任务以及了解uC/OS-II的多任务调度机制二、实验内容 1、在Eg1的基础上新建一个任务;2、在该任务函数中打印提示信息。三、基础知识声明任务栈:1、 在eg1.c文件中声明任务堆栈,任务栈以全局变量的方式静态分配,然后在创建任务时使用。/* task stack */OS_STK StackLEDSTACKSIZE= 0, ;OS_STK StackSEGSTACKSIZE= 0, ;OS_STK StackTESTSTACKSIZE= 0, ;添加任务ID:/* task name string */char IdLED = 1;char IdSEG = 2;char IdTEST = 3;任务函数声明:/* task entry function */void TaskLED(void *Id);void TaskSEG(void *Id);void TaskTEST(void *Id);任务函数实现:void TaskTEST(void *Id) uHALr_printf(Task3() calledn); for (;) OSSchedLock(); sprintf(print_buf, Task%c() turnedn, *(char *)Id); uHALr_printf(print_buf); User_SEG_Blink(); OSSchedUnlock(); OSTimeDly(100); 修改TaskSEG:void TaskSEG(void *Id) uHALr_printf(Task2() calledn); for (;) OSSchedLock(); uHALr_printf(Task%c() turnedn, *(char *)Id);/ User_SEG_Blink(); OSSchedUnlock(); OSTimeDly(100); 四、实验步骤1、打开实验四模板工程2、按照“基础知识”部分内容编辑Eg1.c文件 编辑源代码如下:#includeIncludes.h #include option.h#include 2410lib.h#include uhal.h/* 任务栈 */OS_STK StackLEDSTACKSIZE= 0, ; / 任务LED任务栈OS_STK StackSEGSTACKSIZE= 0, ; / 任务SEG任务栈OS_STK StackTESTSTACKSIZE= 0, ;/* 任务ID */char IdLED = 1; / 任务LED IDchar IdSEG = 2; / 任务SEG IDchar IdTEST = 3;/* 任务处理函数 */void TaskLED(void *Id); / 任务LED任务处理函数void TaskSEG(void *Id); / 任务SEG任务处理函数void TaskTEST(void *Id);/* * 跑马灯闪烁函数,调用一次,四个跑马灯由亮变灭或者由灭变亮 */void User_LED_Blink(void)static int led_status = 0;led_status += 1;if(led_status % 2 = 0)Led_Display(0x0f);elseLed_Display(0x00);/* * 数码管显示实验,由0到F依次显示 */void User_SEG_Blink(void)static unsigned char seg_value = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e ; static int seg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年汽车零部件运输及仓储一体化服务采购合同5
- 2025年高性能船舶用窗户定制及抗海浪腐蚀适应性服务合同
- 2025年度二手车辆抵押贷款服务协议书
- 2025年度农家乐乡村旅游餐饮住宿综合管理服务合同
- 2025年度星级酒店节能照明改造设计与施工合同
- 2025年企业员工安置与健康管理一体化服务协议
- 2025年智慧矿山开采项目承包及智能化操作员培训服务协议
- 2025年生态保护区植被恢复与科研创新合作合同
- 2025年度金融机构房地产项目不可撤销信用证承兑合作协议
- 2025年度数字音乐版权互换与推广合作合同
- 2025年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 幼儿园安全责任书及后勤管理制度
- 消防车辆事故课件
- 《2型糖尿病中医防治指南(2024版)》解读课件
- 剑阁县普安镇污水处理厂扩容建设项目环评报告
- 商务楼宇管理办法
- 肺炎护理试题填空及答案
- 社用手机管理办法
- 心电监护操作常见并发症预防及处理
- 学校食堂各种检查记录表格表册11
- 中国兽药典三部 2020年版
评论
0/150
提交评论