之江新语

之江新语

加载中...

微信扫码,免登录解锁高速下载

如何使用 & 隐私说明

精彩点评

  • 之江新语
    x
    推荐

    还不错,适合入门,比阅读官方文档容易上手。进阶的话,应该再去阅读官方文档和看源码

  • 之江新语
    Yana
    推荐

    或者说链表的节点本来就不是用来存储大量数据的,但是节点跟晾衣架的钩子一样,可以挂载很多数据。 但是,在多任务系统中,每个任务都是独立的、互不干扰的,所以要为每个任务都分配独立的栈空间,这个栈空间通常是一个预先定义好的全局数组,也可以是动态分配的一段内存空间,但它们都存在于RAM中。 任务栈其实就是一个预先定义好的全局数据,数据类型为StackType_t,大小由TASK1_STACK_SIZE这个宏来定义,默认为128,单位为字,即512字节,这也是FreeRTOS推荐的最小的任务栈。 系统为了顺利地调度任务,为每个任务都额外定义了一个任务控制块,这个任务控制块相当于任务的身份证,里面存有任务的所有信息,比如任务的栈指针、任务名称、任务的形参等。 临界段,用一句话概括就是一段在执行时不能被中断的代码段。在FreeRTOS中,临界段最常出现的地方就是对全局变量的操作。全局变量就像是一个靶子,谁都可以对其开枪,但是有一人开枪,其他人就不能开枪,否则就不知道是谁命中了靶子。 在FreeRTOS中,数字优先级越小,逻辑优先级也越小,这与RT-Thread和μC/OS刚好相反。 一个MCU能够支持多少任务,取决于RAM空间的大小。 任务的三要素是任务主体函数、任务栈和任务控制块, 队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断与任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息。任务能够从队列中读取消息,当队列中的消息为空时,读取消息的任务将被阻塞。用户还可以指定阻塞的任务时间xTicksToWait,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。当队列中有新消息时,被阻塞的任务会被唤醒并处理新消息;当等待的时间超过指定的阻塞时间,即使队列中尚无有效数据,任务也会自动从阻塞态转为就绪态。消息队列是一种异步的通信方式。 在FreeRTOS中,信号量用于同步,如任务与任务的同步、中断与任务的同步,可以大大提高效率。 事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。 heap_5.c方案允许用户使用多个非连续内存堆空间,每个内存堆的起始地址和大小由用户定义。 后面要讲解的heap_4.c方案采用的内存管理算法能解决内存碎片的问题,可以把这些释放的相邻的小内存块合并成一个大内存块。 用户可以配置系统可管理的最高中断优先级的宏定义configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,它用于配置内核中的BASEPRI寄存器,当BASEPRI设置为某个值时,NVIC不会响应比该优先级低的中断,而优先级比之更高的中断则不受影响。也就是说,当这个宏定义配置为5时,中断优先级数值在0、1、2、3、4的这些中断是不受FreeRTOS屏蔽的,即使在系统进入临界段时,这些中断也能被触发而不是等到退出临界段的时候才被触发,当然,这些中断服务函数中也不能调用FreeRTOS提供的API函数接口,而中断优先级在5~15的这些中断是可以被屏蔽的,也能安全调用FreeRTOS提供的API函数接口。 很详细的一本基于STM32的FreeRTOS开发指南,值得看多遍,有疑问就看那一节,平时多练习,多观察。

Copyright © 2020 - 2022 Mitsuha. All Rights Reserved. 用户协议 · 隐私政策 ·