版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、RT-Thread内核实验1任务的基本管理实验目的:理解RTOS中任务管理的基本原理,了解任务的基本状态及其变迁过程:掌握RT-Thread任务管理子系统中的任务创建,启动,延时机制掌握RT-Thread任务管理子系统中静态任务与动态任务创建的区别实验设计:为了体现任务的状态切换过程,本实验设计了两个线程,分别是threadbthrzd2,此外,系统中还有另外一个空闲任务,当没有其他任务运行时,系统口动调度空闲任务并投入运行。Thread#116thread#2234519Idle810实验流程:1)系统进入应用程序入口2)初始化静态线程thread1,线程的入口是threadl.entry,
2、参数是RT_NULL,线程栈是threadl.stack,优先级是30,时间片是10个OSTick3丿启动线Idthread14丿创建动态线程thread2,线程的入口是thread2_entry,.参数是RT_NULL,栈空间是512,优先级是31,时间片是25个OSTlcL5)启动线程thread26)1系统首先调度thread1投入运行,打印第0次运行的信息,然后通过延时函数将口己挂起100个OSTick,系统转入调度thread2投入运行7)Thread2打印第0次运行信息,然后通过延时函数将口己挂起50个OSTick8)3系统中无任务运行,转入调度空闲任务9)450个OSTick时间
3、庙Thread2被唤醒,打印第1次运行的信息,继续通过延时函数将口己挂起50个OSTick10丿5系统中无任务运行,系统转入调度空闲任务,运行50个OSTick6Threadl被唤醒,打印第1次运行信息,继续挂起100个OSTick7Thread2被唤醒,打印第2次运行的信息,继续挂起50个OSTick8系统中无任务运行,系统转入调度空闲任务运行50个OSTick9Thread2被唤醒,打印第3次运行的信息,继续挂起50个OSTick10系统中无任务运行,系统转入调度空闲任务,运行50个OSTwk16丿循环上述过程源程序说明:/*线程1的对象和运行时用到的栈*/staticstructrt_t
4、hreadthreadl;ALIGN(4)staticrt_uint8_tthreadl_stack512;/*线程1入口*/voidthreadl_entry(void*parameter)inti;while(1)for(i=0;i10;i+)rt_kprintf(%dnnzi);/*延时100个OSTick*/rt_thread_delay(100);/*线程2入口*/voidthread2_entry(void*parameter)intcount=0;while(1)rt_kprintf(nThread2count:%dnn,+count);/*延时50个OSTick*/rt_thr
5、ead_delay(50);/*用户应用程序入口*/intrt_application_init()rt_thread_tthread2_ptr;rt_err_tresult;/*初始化线程1*/*线程的入口是threadl_entry,参数是RT_NULL*线程栈是tzhreddl_stack*优先级是200,时间片是10个OSTick*/result=rt_thread_init(&threadl,Hthreadlnzthreadl_entry,RT_NULL9&threadl_stack0,sizeof(threadl_stack)/30,10);/*启动线程*/if(result=RT
6、_EOK)rt_thread_startup(&threadl);/*创建线程2*/*线程的入口是thread2_entry,参数是RT_NULL*栈空间是512,优先级是250,时间片是25个OSTick*/thread2_ptr=rt_thread_create(nthread2nrthread2_entry,RT_NULL9512z31,25);/*启动线程*/if(thread2_ptr!=RT_NULL)rt_thread_startup(thread2_ptr);return0;输出信息:运行程序,通过观察串I输出,就可以观察到任务的运行和切换情况了。f点设置C017一PuTTY2
7、006-2009Copyrightbyt:t-tlitreadtearfi0Threacl2count:1Thread2count:21Thread2count;3Thread2count:42Threacl2count:5Threadscount:63Thread2count:7Thread2count:84Thread2count:9Thread2count.;lu5Thread2count:11Thread2count:126Thread2count.;13Thread2count;147Thread2count:15ThreadZcount:16一RTThreadOperatingSy
8、stem/I0.4.0buildNov1220108口回冈使用MDK调试I具在程序小设置一些合理断点來运行,可以清晰地看到线程运行和切换的完整过程。2729303132333435363738394041424344454648495051/*线程1入口*/voidthreadl_entry(void*pararneteu)_inti;while(1)for(i=0;i10;i+)(rt_kprintf(rdn,r,i);/*延时100个OSTick*/rt_thread_de1ay(100);八线程2入口0voidthread2_entry(voidpararneter)_intcount=
9、0;while(1)rt_kpEintf(rrThread2count:%dnrrf+count);TIPS:动态线程和静态线程RT-Thread中支持静态和动态两种定义方式。用线程來举例的话,rt.thread.imt对应静态定义方式,rt_thread_create对应动态定义方式使用静态定义方式时,必须先定义静态的线程控制块,并1L定义好堆栈空间,然后调用rt.thread.LRLt來完成线程的初始化工作。采用这种方式,线程控制块和堆栈占用的内存会放在RW段,这段空间在编译时就已经确定,它不是可以动态分配的,所以不能被释放,而只能使用rt.thread.detach函数将该线程控制块从对象管理器中脱离。使用动态定义方式rt.thread.create时,RT-Thrzd会动态申请线程控制块和堆栈空间。在编译时,编译器是不会感知到这段空间的,只有在程序运行时,RT-Thread才会从系统堆中中请分配这段内存空间,当不需要使用该线程时,调用rt.thread.delete函数就会将这段申请的内存空间重新释放到内存
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 低速载货汽车司机岗位环保责任制能力考核试卷含答案
- 2025-2026学年大班玩球远说课稿
- 用电客户受理员岗位环保知识考核试卷含答案
- 稀土电解工发展趋势强化考核试卷含答案
- 印染定型工风险识别水平考核试卷含答案
- 货车检车员岗位责任制竞赛考核试卷含答案
- 2025-2026学年大嘴巴朋友说课稿
- 2025-2026学年《蚊子和狮子》说课稿
- 2026年氨纶纤维制造行业技术趋势研究报告及未来五至十年并购整合与集中度提升
- 2026年其他未列明金融业行业投资价值分析报告及未来五至十年成本优化与效率提升
- 2026-2027学年高三第一次联考(月考)试卷语文+答案
- 2026年国家电网考试历年真题库(附答案)
- 2026外研版八年级上册 Unit 2 Getting along 中考题型测试(语法选择题、完形填空、短文填空)
- 江南大学介绍
- 行书课件教学课件
- 装配钳工试题题库及答案
- GB/T 45602-2025船舶与海洋技术可调式滚轮闸刀掣链器
- MOOC 通信电子线路-华中科技大学 中国大学慕课答案
- 低压带电作业安全措施工作注意事项
- 园区案例—松山湖产业园PPT课件
- 心存感恩(完美版).pptx
评论
0/150
提交评论