1、系统时间管理
系统时间管理函数用来对系统时间进行操作,是OS的一个基础性的东西。个人认为,设置系统时间和获取系统时间对OS来说基本是可有可无的。
uTenux提供了三个系统时间相关API。分别用于设置系统时间、获取系统时间和获取系统工作时间。其中,前两个比较蛋疼。时间的表示是从1985年1月1日0:00:00(GMT)开始以ms为单位的累加。要想获得可读的时分秒,还得手动转换。我最讨厌这个转换了,香港虚拟主机,所以不想细做这个实验。
tk_get_otm获取的系统工作时间也是一ms表示的,香港虚拟主机,只是这个数据比较直观,不需要再去转换了。
【实验说明】
我懒的去转换时间,本实验使用验证三个函数,用ms表示时间。
首先设置系统时间,然后读出十次otm,最后读出系统时间。看看读出的系统时间与写入的时间的差别。其实这时,板子上RTC功能没有打开,设置系统时钟这个功能基本等于没用。
我比较懒,这就就在例程的基础上添加几行代码。没有手动输入各个函数。
【代码及输出】
#include EXPORT ER TimeSample( void ){B ostr[10],hstr[3],mstr[3],sstr[3];UW i,hour,minute,second;SYSTIM otm,systime;ER ercd;//设置系统时间systime.hi = 1000;systime.lo = 600;tk_set_tim(&systime);tm_putstring((UB*));for(i=0;i<20;i++) {ercd=tk_get_otm(&otm);if(E_OK != ercd){tm_putstring((UB*));PutErcd(ercd);}tm_putstring((UB*));second=otm.lo/1000;minute=second/60;second=second%60;hour=minute/60;minute=minute%60;ltostr(otm.lo,ostr,tm_putstring((UB*)ostr);tm_putstring((UB*));ltostr(hour,hstr,tm_putstring((UB*)hstr);tm_putstring((UB*));ltostr(minute,mstr,tm_putstring((UB*)mstr);tm_putstring((UB*));ltostr(second,sstr,tm_putstring((UB*)sstr);tm_putstring((UB*));Delay(0x1700000);}//获取系统时间并输出tk_get_tim(&systime);tm_putstring((UB*));second=systime.lo/1000;minute=second/60;second=second%60;hour=minute/60;minute=minute%60;ltostr(systime.lo,ostr,tm_putstring((UB*)ostr);tm_putstring((UB*));ltostr(hour,hstr,tm_putstring((UB*)hstr);tm_putstring((UB*));ltostr(minute,mstr,tm_putstring((UB*)mstr);tm_putstring((UB*));ltostr(second,sstr,tm_putstring((UB*)sstr);tm_putstring((UB*));return E_OK;}
输出:
—————————————————- micro Tenux Version 1.6.00(build 0180) Supported MCU is ST STM32F407VG Copyright(c) 2008-2013 by Dalian uLoong Co.,Ltd. —————————————————-
Time sample is now starting!Now working up time is 0,0:0:0Now working up time is 570,0:0:0Now working up time is 1150,0:0:1Now working up time is 1730,0:0:1。。。。。。。。。。。。。。Now working up time is 9230,0:0:9Now working up time is 9810,0:0:9Now working up time is 10390,0:0:10Now working up time is 10960,0:0:10Now system time is 12140,0:0:12Push any key to shutdown the micro Tenux.
2、周期性处理
周期性处理程序是一个在规则的时间间隔内启动的时间事件处理程序。与任务不同,周期性处理函数不是死循环。执行一次就退出,但是不能单独存在。
建立好周期性处理函数之后,原任务就不用管了。OS会周期性地执行这个任务。这个周期性的函数,不受优先级限制。只要到期就会运行一次。不管多高优先级的任务在使用MCU。
在建立每个周期性处理程序时,会为它们设定程序启动时的时间间隔(周期时间)和周期相位。周期时间t就是每隔t时间会启动一次处理函数,周期相位m,香港虚拟主机,是指每个周期的第m时间启动这个处理函数。
SVC描述
1、创建周期性处理程序
ID cycid=tk_cre_cyc(T_CCYC* pk_ccyc);
其中T_CCYC是创建结构体,定义如下
typedef struct t_ccyc {VPexinf;ATRcycatr;FPcychdr;/*处理程序入口地址*/RELTIMcyctim;RELTIMcycphs;UBdsname[} T_CCYC;
2、创建之后就实验tk_sta_cyc让周期函数可以运行了
3、停止周期运行tk_stp_cyc,删除周期处理tk_del_cyc,只要提供一个ID即可。
【实验描述】
1、创建一个周期运行程序并启动。
2、创建一个优先级较高的任务TaskA,启动后进入死循环。即不给初始任务再次运行的机会
3、周期处理函数,处理20次之后,自动停止并删除自己。
【代码及输出】
例子太简单了,自己加了点内容。
我不敢说我明天便可以做一个快乐的人,面朝大海春暖花开。