freertos
Huskar_Liu
这个作者很懒,什么都没留下…
展开
-
freertos(第十二课,multi-task,LWIP)
freertos能够多任务处理,这对于LWIP而言,是最好不过的了。这样,LWIP可以创建多线程,来并行处理发送和接收。SDK已经移植好了基于freertos的lwip。先来看看lwip的选项。1)api_mode。设置为socket。2)其他选项,保持默认。在socket模式下,lwip是以thread的方式进行进程管理。由于是架设在freertos上,所以thread是用task来实现的。后面统一用线程来称呼LWIP中创建的任务。我们从lwip141_v2_0/src/contrib/po原创 2020-05-23 12:38:11 · 1645 阅读 · 0 评论 -
freertos(第十一课,multi-task程序架构)
基于freertos的程序架构,可以结合front-middle-rear stage,进行任务划分。整个系统仍然是一个event driven system。但是由于有了RTOS进行任务管理,所以在任务划分上,更加清晰,并且实时性更好。主要考虑的是,进程通信,进程功能,事件处理。对于外部事件,对应于IRQ。对于IRQ的响应过程,分为了两部分。类似于linux中的top half和bottom half。我们可以分为IRQHandler和IRQTask两部分。则IRQHandler处于front s原创 2020-05-23 10:11:39 · 1312 阅读 · 0 评论 -
freertos(第十课,基于standalone移植freertos)
我们来看看SDK中已经移植好的freertos,具体做了哪些事情。在BSP文件夹下,除了常规的standaloneOS所提供的模块,还多了一个freertos901_xilinx_v1_1文件夹。打开system.mss,可以看到freertos901的相关配置。这些配置会对应生成freerotscnfig.h。一般情况下,我们不需要手工修改freertosconfig.h,而只需要在system.mss里配置各种选项即可。这里注意几个重要的选项:stdin,stdout,设置为ps7_uart原创 2020-05-22 22:54:32 · 1137 阅读 · 0 评论 -
freertos(第九课,task notifications)
任务通知是一个可选的功能,需要配置宏#define configUSE_TASK_NOTIFICATIONS 1freertos中的每个TCB,都有一个32位的通知量。ulNotifiedValue。任务通知量也是一个信号量事件,也是用于进程同步的方式。所以,进程也是向OS申请PV操作的。freertos提供了一系列的API。typedef enum{ eNoAction = 0, eSetBits, eIncrement, eSetValueWithOverwrite, eSet原创 2020-05-22 17:41:24 · 367 阅读 · 0 评论 -
freertos(第八课, event group)
semaphore只能用于单个事件的进程同步,如果需要进行多事件同步,就需要使用eventgroup。一个eventgroup就是一组eventbit。我们可以自行约定eventbit所代表的含义。事件组的类型是EventGroupHandle_t。一个事件组,可以存储24个事件位。高8位有其他用处。freertos提供了一系列的API。EventGroupHandle_t xEventGroupCreate(void);void vEventGroupDelete(EventGroupHan原创 2020-05-22 16:10:08 · 2034 阅读 · 0 评论 -
freertos(第七课,semaphore, mutex, msg queue)
freertos是一个多进程操作系统。多进程的一个重要控制,就是进程同步。大多数的OS,都会基于PV操作完成进程同步。基于EVENT的进程同步,event在OS中,被表示为一个结构体对象,最简单的情况下,只有一个数据成员。需要同步的进程,分别向OS申请P操作或者申请V操作,并告知OS,所锚定的event对象。OS检查event的状态,并对发出申请的进程执行相应的状态切换。申请P操作的进程,将被OS尝试阻塞,如果event状态允许进程继续执行,则不阻塞,而允许进程继续执行。如果event状态不允原创 2020-05-22 15:23:17 · 2109 阅读 · 0 评论 -
freertos(第六课,TASK, Scheduler,taskdelay)
freertos用task来表示一个进程。task拥有自己的stack,这是进程最明显的标志。task被表示为4种状态。run, ready, suspend, block。run态是当前占据CPU的task的状态。ready态是当前不需要等待资源到位,只需要排队获得CPU的task的状态。block态是当前需要等待事件到位的task的状态,具有超时时间,不会一直block。suspend态是当前需要等待时间到位的task的状态,但是不具有超时时间,会一直suspend。来看看任务控制块。t原创 2020-05-22 12:53:40 · 1234 阅读 · 0 评论 -
freertos(第五课 softtimer)
freertos提供了soft timer,需要为softtimer挂接callback,当时间到达后,就会触发callback执行。callback在timer的服务任务中执行的,所以,不能使用可能阻塞任务的API。一般使用SysTick作为softtimer的基础时钟。两次触发callback的时间间隔xTimerPeriodInTicks叫做定时周期。freertos通过一个prvTimerTask任务(Daemon Task)管理softtimer。这个任务是在启动调度器时,自动创建的。D原创 2020-05-22 10:23:11 · 1125 阅读 · 0 评论 -
freertos(第四课, mem, alloc)
freertos提供了内存分配的APIpvPortMalloc(),替代C中的malloc(),vPortFree(),替代C中的free(),xPortGetFreeHeadSize(),获取当前未分配的堆的大小freertos提供了5种heap的分配方法。static uint8_t ucHeap[configTOTAL_HEAP_SIZE];可以看出,全局堆的大小,由配置宏来确定。1)heap_1.c内存从静态的ucHeap中分配,使用于那些不太需要频繁的动态内存分配的应用。它只申请原创 2020-05-21 22:19:13 · 590 阅读 · 0 评论 -
freertos(第三课,interrupt for critical segment)
freertos中,并不提供挂接IRQHandler的API。所以,如果需要注册ISR,仍然需要使用standaloneOS提供的API。例如GIC的API。freertos提供的中断管理,只是用来屏蔽和打开中断,用来进行临界代码段保护。freertos提供了几个宏拟函数,用来进行临界代码段保护。#define taskENTER_CRITICAL()//mask all IRQ#define taskEXIT_CRITICAL()// clear mask #define taskENTER原创 2020-05-21 21:38:18 · 353 阅读 · 0 评论 -
freertos(第二课,coding style,list )
freertos对数据类型进行了统一定义。标准C的类型,被命名为标准的freertos类型。例如:#define portCHAR char #define portSHORT short#define portLONG long#define portSTACK_TYPE uint32_ttypedef portSTACK_TYPE StackType_t;#define portBASE_TYPE longtypedef long BaseType_t;typedef unsig原创 2020-05-21 19:46:26 · 345 阅读 · 0 评论 -
freertos(第一课,导言)
vivadoSDK中,已经移植好了freertos。直接使用即可。freertos的部署,多见于MCU,它介于裸机前后台架构和复杂的linuxOS之间。freertos上部署协议栈是比较容易的事,例如LWIP,WIFI,BLUETOOTH。官方网站是www.freertos.org本系列旨在从原理层面剖析freertos的移植,实现,功能模块及其API。我们将按照下面的顺序来学习freertos,并找到SDK中对应的文件。1)freertos编码风格。2)freertos列表,列表项,链表。原创 2020-05-21 17:35:37 · 332 阅读 · 0 评论