ucos修改笔记

ucos修改笔记

ID:42379552

大小:40.00 KB

页数:6页

时间:2019-09-14

ucos修改笔记_第1页
ucos修改笔记_第2页
ucos修改笔记_第3页
ucos修改笔记_第4页
ucos修改笔记_第5页
资源描述:

《ucos修改笔记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Ucos以中断+信号量方式控制LED与软件定时器定时方式控制LED练习笔记这两天,在学习如何在ucos系统组织程序。由于对ucos的了解较为笼统,所以先以LED控制来练习使用。练习1:使用按键中断发出信号量来控制LED;练习2:使用定时器控制LED。开发板硬件连接简介:软件环境:ADS1.2处理器:S3C2440LED连接:GPB的5、6、7、8四个引脚控制四个LED的1、2、3、4,输出低电平点亮LED。按键连接:K1接GPG11,作为外中断EINT19;K2接GPG3,作为中断EINT11;K3接GPF2

2、,作为外中断EINT2;K4接GPF0,作为外中断EINT0。练习1:在本练习中,只是为了示意性的了解中断如何使用信号量来控制程序的运行,所以,仅使用K3、K4两个按键来控制LED3、LED4。首先,要使能信号量。即#defineOS_SEM_EN1定义两个信号量OS_EVENT*Semp1;OS_EVENT*Semp2;编写两个中断函数:voidExtint0_isr(void){rSRCPND=rSRCPND;rINTPND=rINTPND;清楚终端相关的标志位,为下一次中断作准备OSSemPost(Se

3、mp1);释放信号量}voidExtint2_isr(void){rSRCPND=rSRCPND;rINTPND=rINTPND;OSSemPost(Semp2);}初始化中断:voidExtinit(void){rGPFCON=(rGPFCON&0xFFCC)

4、0x0022;rEXTINT0=(rEXTINT0&0xFFFFF8F8)

5、0x00000202;rINTMSK&=0xFFFFFFFA;以上为设置GPF的0和2引脚为中断方式,边沿触发,打开中断屏蔽;pISR_EINT0=(U32)Extint0_

6、isr;/*使中断向量指向中断函数,中断函数的名称命名无所谓,但是必须放到底层设置的该中断向量的位置,在此为”pISR_EINT0/1”,且标记为32位地址;*/pISR_EINT2=(U32)Extint2_isr;}在主程序中,先初始化ucos后,即可初始化中断以及创建信号量,创建信号量必须在初始化ucos之后进行。Extinit();Semp1=OSSemCreate(0);Semp2=OSSemCreate(0);然后在创建的任务中使用信号量Voidtask1(void*pdata){While(1)

7、{OSTimeDly(OS_TICKS_PER_SEC*3);rGPBDAT&=0x6FF;OSTimeDly(OS_TICKS_PER_SEC*3);rGPBDAT

8、=0x7FF;}}Voidtask2(void*pdata){While(1){OSTimeDly(OS_TICKS_PER_SEC*3);rGPBDAT&=0x77F;OSTimeDly(OS_TICKS_PER_SEC*3);rGPBDAT

9、=0x7FF;}}使用ucos中的延时函数会调用任务切换,也就是说在延时完设置的时间后任务管理器会根

10、据最高优先级任务进行切换,可能延时之后不运行本任务,只是将本任务放入就绪状态。所以,如果是有具体时间要求的位置,感觉不适合使用OSTimeDly,可以使用定时器或者自编写的延时函数。练习一的主要部分就是这样的。在刚开始写的时候,遇到了些不顺利,例如由于粗心大意而导致的对LED引脚的设置错误等,同时,由于我板子的按键粘连的问题,不能在按下后快速返回,导致过中断函数被重复触发,而使程序不能正常运行的问题,于是在中断中加入了一段时间的延时后才去清除中断标志位,这样就正常了。刚开始写完的时候,进行测试,在软件环境下编

11、译没有问题,然后下载到板子的内存中执行,竟然不能运行,各个任务都不执行。就先将中断部分以及涉及到信号量的部分去掉,再次运行,程序正常。反复检查被去掉的部分,没有找到明显的问题,开始一条指令一条指令的去掉注释,检查问题,发现和程序的位置有关,将相关的程序行进行了位置调整,运行正常。最主要的是建立信号量等,必须要在初始化ucos之后。练习二:使用ucos的软件定时器控制LED在练习一上说了,因为使用ucos里面的延时会发生程序调度,如果不想程序被调度,必须使用定时器或者自己编写的函数来处理延时问题。定时器本身可以

12、很准确的进行定时,但是感觉不适合使用的太多,而大一些的程序往往有很多需要不同时间延时的地方,如果全部使用定时器,可能会因为建立定时器相关结构而造成太多不必要的内存浪费,本练习只是为了了解一下定时器的使用。使能定时器#defineOS_TMR_EN1建立定时器相关变量OS_TMR*tLEDa;指向定时器结构的指针OS_TMR*tLEDb;U8cnt1,cnt2;程序中计数用INT8Uerr;指向错误的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。