6-18
实验1:
1.打开hook
增加
Debug svc hook function is entering
task ID is 3 主要显示现在执行的任务ID,调试使用
程序流程:
任务B,启动任务A,C,启动任务A后,任务Asleeping,然后任务B在等待输入,如果输入不为e,则任务B进入sleeping ,任务C执行,任务C为一死循环,当任务B sleeping 时间到后,有进入任务B,继续上一流程,直到任务B输入e,退出任务B,并终止任务A,C,无法理解为什么任务A睡眠时间到后,不继续进入任务A
6-26
实验2:
任务A开始,获取信号量,释放信号量,然后进入sleeping ,任务B开始,获取信号量,释放信号量,与例1中一样等待输入,
关键:
tk_wai_sem,tk_sig_sem对信号量进行操作
实验3
事件记录,主要流程如实验2
关键
tk_wai_flg,tk_clr_flg,ercd=tk_set_flg
中间Delay使用等待,时间比较长,应该可以处理其他事件
实验4
任务A,tk_snd_mbx,tk_rcv_mbx
任务B,tk_rcv_mbx,接受任务A消息,然后,tk_snd_mbx发送另外消息
实验5
tk_loc_mtx,提高优先级,锁定,读取数据,tk_unl_mtx,还原优先级,解锁,
前提,低优先级任务不能打断高优先级任务,保证高优先级任务读取数据时,低优先级任务不进行操作。
实验6
tk_snd_mbf,tk_ref_mbf,主要为两个数组,一个接受,一个发送,每个任务向自己的发送数组发送数据,然后再判断接受数组中的内容,另外一个任务的接受与发送为相反,从而实现两个任务之间的消息传递。
实验7
暂未发现用处,需继续理解
tk_acp_por,tk_rpl_rdv
实验8
建立5个内存单元,任务A输出内存中的内容,并释放内存。tk_rel_mpf,内存容量增加
任务B使用内存,ltostr,内存量减少,任务B调用A,使用内存,并释放
实验9
使用可变内存,任务B,tk_get_mpl得到一定尺寸的内存,任务a释放,与实验8为内存的不同使用方法。
其实可以做成在一个任务中调用与释放,另外一个任务使用此内存,任务完成后传递信号量。
实验10
使用tk_get_otm得到时间,然后再显示相应时间信息。、
实验11
使用tk_cre_cyc建立一个周期,并设定相应周期参数,周期到时调用CycHandler
需要了解tk_cre_cyc的使用,是否是采用定时器终端,需要进一步研究。
实验12
建立警报,tk_cre_alm,tk_sta_alm,然后采用延时等待,警报时间到后,调用函数AlarmHandlerAlarmHandler
实验13
文件在sysdepend目录中,选择armv7_m目录下文件。
文件结构是在任务重等待9秒钟,在每1秒钟内会有一个中断产生,在中断中输出相应文件。次试验无法体验出操作系统的优越性。
实验14
使用tk_ref_ver读取版本信息,并显示
实验15
综合程序,把以上实验总结起来
例程分析:
1,实际系统中会出现一个死循环,在例子中usemain中有一个,但在操作系统中也不一定需要退出,
2. 信号输入采用串口输入,并且是采用等待方式,实际系统中一般不会在串口数据中采用等待方式,可以在中断中接受数据,然后对一个信号量赋值,在其他任务重判断信号量,进行处理。
3,延时,实际操作中延时采用标志位判断,一般不会使用delay,只有在硬件仿真中可能使用delay,可以采用实验10中的时间标志方式实现延时
4,多任务实现,例程中的多任务同时只能有一任务执行,其余任务处于睡眠状态,实际中应该是产生一个新的任务,此任务优先级高,会使原来任务停止,并保留原有任务信息,高优先级任务完成后,继续执行低优先级任务。
5.命令输入,综合程序中有命令输入功能,实际操作系统需要有个命令解析,例如list,kill等,此处list定义为查看现有运行任务状态