探索者stm32f4 trochili实验手册本试验教程通过大量演示如何使用TrochiliRTOS各_第1页
探索者stm32f4 trochili实验手册本试验教程通过大量演示如何使用TrochiliRTOS各_第2页
探索者stm32f4 trochili实验手册本试验教程通过大量演示如何使用TrochiliRTOS各_第3页
探索者stm32f4 trochili实验手册本试验教程通过大量演示如何使用TrochiliRTOS各_第4页
探索者stm32f4 trochili实验手册本试验教程通过大量演示如何使用TrochiliRTOS各_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章第一个完整的例 第2章线程的管理和调度试 第4章信号量试 第5章互斥量试 第6章邮箱试 第7章消息队列试 第8章标记试 第9章时间管理试 在RTOS启动之前,必须用户应用程序函数,在这个函数里,用户可以初始化 1-1应用演/*staticvoid{/*配置使能开发板上的LEDKEY*//*初始化信号量TclInitSemaphore(&LedSemaphore,0,1,/*LEDTclInitThread(&ThreadLED,&ThreadLEDEntry,(void*)NULL,ThreadLEDStack,THREAD_LED_STACK_SIZE,THREAD_LED_PRIORITY,THREAD_LED_SLICE);/*激活LED线程/*处理器BOOT之后会调用main函数,必须提供int{ /*returnLED线程随即抢占IDLE线程,用户程序开始执行。Trochili的完整的应用程序框架。涉及了如何创建一个用户任务和如何接管系统中断,以及多任务系统的启动。在下面各章中介绍Trochili嵌入式操作系统的最基本功能就是任务的管理与调度。TrochiliRTOS提供基本的线程管 2‐3TrochiliRTOS在设计的时候,程功能的使用方面做了特殊的处理,设计了一个线程管理操作的授这就给线程管理和内核的设计带了了很大方便,比如内核IDLE线程,是要一直处于就绪状态的,不能被挂起、阻塞或者休眠。如果在每个任务管理的API中都判断作的线程是不是IDLE线程,那内核实现时就的功能操作来完成的。每个线程都有它的操作集合,可以简单灵活的配置组合各种属性。比如内核IDLE线程只有被激活的,那么其他线程是无法通过API来使得它休眠或者挂起的。要依靠开发板上的LED灯来演示代码的执行路径。ALIENTEK开发板上按照1秒的时间间隔打开和关闭LED2设备。在下面的例子中,共有三个线程,线程ThreadLEDOnLED设备开启,线程在用户初始化函数中,对这三个线程都进行了初始化。但是只激活了ThreadCTRL。所以当ThreadCTRL1sLED控制线程,实现LED灯按照1s的间隔(不是很精准)点亮和熄灭。灭LED的。LED灯作出点亮‐熄灭的闪烁效果。板上通过三个独立线程的时间片的变动,来实现LED亮/暗的不同占空比。本例程序请参考试验代码CH2_THREAD_EXAMPLE7。返回1秒。4TrochiliRTOS目前支持二值信号量、计数信号量和互斥信号量。其中二值信号量和计TrochiliRTOSAPI信号量结构,然后作为参数被API初始化。10根据操作模式,线程或者直接退出或者阻塞在信号量的线程阻塞队列上。ISR为系统运行时信号量随时可能作,所以查询出来的数据可能不是的,需要1234567量后就关闭LED,循环往复。程;而LED线程的执行则依赖于主控线程的信号量释放操作。最后以非阻塞方式释放信号量2;最后以阻塞方式获得信号量2;LED线程2的执行也依赖于LED线程1,因为它们的运行都依赖于某个信号量的操作。ISR不会等待信号量,也就不存在同步的问题。从实际应用的角度讲,ISR1LED1LED的点亮和熄接以ISR模式释放信号量,然后退出。是把可能的带的资源串行化,一次必须结束后才能被再次。UpCaseUpCase线程LowCaseUpCaseUpCaseUpCaseUpCaseLowCase所以线程UpCase阻塞,线程LowCase开始运行UpCaseUpCaseUpCaseLED1LED1FLUSH操作,使得那些阻塞在信号量线程阻塞队首先延时1秒后,然后强制解除LED线程的阻塞;循环往复;首先延时1秒后,然后强制解除LED线程的阻塞;循环往复;TrochiliRTOSAPI一个互斥量结构,然后作为参数被API初始化。 为系统运行时互斥量随时可能作,所以查询出来的数据可能不是的,需要1234 567时1秒后再释放互斥量LED1秒的间隔点亮和熄灭。其中熄灭LED;循环往复。而控制线程则每隔1秒对互斥量执行一次Abort操作。则熄灭LED;循环往复。而控制线程则每隔1s对互斥量执行一次Flush操作。LED1秒的间隔点亮和熄灭。其中熄灭LED;循环往复。而控制线每隔1s对互斥量执行一次Deinit操作,然后重新初始CH5_MUTEX_EXAMPLE5。程序运行后,LED邮箱初始化使用习惯上来说,不建议用户在ISR广播邮件 12345676‐2的运行不依赖LED线程;而LED线程的执行则依赖于主控线程发送的邮件。LEDKeyISR,ISR中,会交替发送LED点亮和熄灭的邮件,从而实现LED按照用户按键的操作点亮和熄灭。行则依赖于KeyISR,而KeyISR的运行是不确定的。LED的控制命令。然后两个线程通过邮箱发送和接收邮件,从而LEDLED线程的执行则依赖于主控线程发送的邮件。110LED线程2的执行也依赖于LED线程1,因为它们的运行都依赖于某个邮箱的操作。LED1个控制线程的单向同步(没有数据传输。实现三个LED11LED线程的LED1LED分别按照1秒的间隔点亮和熄灭。这里使用了1个邮箱。塞。而被解除阻塞的线根据邮间的内容点亮或者熄灭LED。而实现LED按照1秒的间隔点亮和熄灭。而实现LED按照1秒的间隔点亮和熄灭。复;注意在这个例程里,LED线程和主控线程的没有数据传输。消息队列初始化广播消息ISR12345677-2根据消息的内容,即LED控制命令来点亮或者熄灭LED,循环往复。的运行不依赖LED线程;而LED线程的执行则依赖于主控线程发送的消息。LEDKeyISR,ISR中,会交替发送LED点亮和熄灭的消息,从而实现LED按照用户按键的操作点亮和熄灭。行则依赖于KeyISR,而KeyISR的运行是不确定的。本例程序请参考试验代码CH7_MESSAGE_EXAMPLE2。这个例子不方便做图示,请读者自己功后则停止运行,等待信号量;LED线不停的以阻塞方式尝试接收消息,然后根据消息线程的运行依赖LED线程释放信号量;而LED线程的执行则依赖于主控线程发送消息。LED线程0首先以阻塞方式从消息队列0消息,然后根据消息内容点亮或者关LED线程1首先以阻塞方式从消息队列1消息,然后根据消息内容点亮或者关LED2LED1,因为它们的运行都依赖于某个消息队列的操作。LED1LED分别按照1秒的间隔点亮和熄灭。这里使用了1个消息队列。解除阻塞。而被解除阻塞的线根据邮间的内容点亮或者熄灭LED。消息,从而实现LED按照1秒的间隔点亮和熄灭。消息,从而实现3LED按照1秒的间隔点亮和熄灭。队列。循环往复;注意在这个例程里,LED线程和主控线程的没有数据传输。第8章标记试标记初始化局变量。标记初始化之后才可以进行其他操作。当前版本不支持标记的动将标记恢复到初始状态,和标记初始化的功能是相反的。标记被取消线程或者ISR将发送到标记中。这个操作不会造成发送 接收 将标记线程阻塞队列中的所有线解除阻123467表81标记功能函每次发送成功后延时1秒;而两个LED线在等待接收自己期待的,然后通过接收到的内容来控制LED的点亮或者熄灭LED。行不依赖LED线程;而另外两个LED线程的执行则依赖于主控线程发送的。替发送LED点亮和熄灭的,从而实现LED按照用户按键的操作点亮和熄灭。行则依赖于KeyISR,而KeyISR的运行是不确定的。LED1个控制线程的单向同步(没有数据传输。实现三个LED分别按照1秒的间隔点亮和熄灭。这里使用了1个标记。具体实现时,多个LED线程的线程函数相似,都是以阻塞方式从同一标记,目的是阻塞在标记的线程阻塞队列上,使得多个线程的执行路径交汇在一起。而控制线是每隔1秒则对标记进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论