目前市场上主流的一些嵌入式系统
FreeRTOS:FreeRTOS是一款小巧、高效的实时操作系统,适用于多种处理器架构,如ARM、MIPS、AVR、PIC等。它具有可移植性和开源性质,被广泛应用于许多不同领域的嵌入式系统开发中。
uC/OS:uC/OS是一款商业实时操作系统,可用于各种不同的处理器架构。它的优点在于具有较低的内存和处理器占用率,以及高度可靠性和安全性。它也有一个免费的版本叫做uC/OS Lite,可用于非商业用途。
Linux嵌入式系统:Linux是一个开源的操作系统,适用于各种处理器架构。它具有强大的功能和广泛的应用场景,可用于许多不同的嵌入式系统中。但是,由于Linux的内存占用率相对较高,因此它不适用于一些资源受限的嵌入式系统。
RT-Thread:RT-Thread是一款国产的小型实时操作系统,适用于多种处理器架构。它具有可移植性和开源性质,且具有较低的内存和处理器占用率,适合于一些资源受限的嵌入式系统。
FreeRTOS的特点
小巧灵活:FreeRTOS内核非常小,只有几个KB的代码,适合嵌入式系统中内存资源受限的场合。
实时性强:FreeRTOS支持实时性,可以很好地处理时间敏感的任务,同时提供了多种调度算法,可以根据具体应用场景进行选择。
可裁剪性强:FreeRTOS内核具有可裁剪性,用户可以根据实际需求选择需要的功能,避免不必要的资源占用。
可移植性强:FreeRTOS内核可以移植到多种不同的硬件平台和操作系统上,具有广泛的适用性。
丰富的功能组件:FreeRTOS提供了丰富的功能组件,包括任务管理、内存管理、时间管理、队列、信号量、事件组等。
可扩展性强:FreeRTOS支持扩展,用户可以根据需要添加新的功能组件,或者修改现有的功能组件。
社区活跃:FreeRTOS有一个活跃的社区,用户可以在社区中获取帮助、分享经验和交流技术。
FreeRTOS的功能
任务管理:支持多任务管理,可以创建、删除、挂起、恢复任务,设置任务优先级和堆栈大小等。
内存管理:支持动态内存分配和释放,提供内存池管理机制,有效地减少内存碎片。
时间管理:支持定时器管理,可以创建、删除、重置定时器,支持周期性定时器和单次定时器。
消息队列:支持消息队列,可以实现任务之间的数据传输和同步,支持优先级队列和非优先级队列。
信号量:支持二值信号量和计数信号量,可以实现任务之间的同步和互斥。
事件组:支持事件组管理,可以实现任务之间的同步和通信。
互斥量:支持互斥量管理,可以保护共享资源的访问。
中断管理:支持中断管理,可以在中断处理程序中使用FreeRTOS提供的API函数。
低功耗管理:支持低功耗管理,可以实现系统休眠和唤醒。
文件系统:支持文件系统管理,可以访问文件系统中的文件和目录。
TCP/IP协议栈:支持TCP/IP协议栈,可以实现网络通信。
FreeRTOS支持多种调度算法
抢占式优先级调度算法:在这种算法中,任务的优先级越高,调度的机会就越多。当优先级更高的任务就绪时,会立即抢占正在执行的任务。
非抢占式优先级调度算法:在这种算法中,任务的优先级越高,调度的机会就越多。但是当正在执行的任务被抢占时,只有等到任务主动让出CPU或者发生中断时才会进行调度。
时间片轮转调度算法:在这种算法中,每个任务被分配一个时间片,当时间片用完后,任务被挂起,然后调度器选择下一个任务运行。当所有任务都运行一遍后,再重新从第一个任务开始。
基于最短剩余时间优先(SRT)的优先级调度算法:在这种算法中,任务被按照优先级排列,但是在执行任务之前,会先检查每个任务的剩余执行时间,并且优先执行剩余时间最短的任务。
如何设置FreeRTOS使用哪种算法
可以通过查看FreeRTOS配置文件或代码中的以下宏定义来确定所使用的调度算法:
configUSE_PREEMPTION 宏定义,若该值为1,则使用抢占式优先级调度算法;若该值为0,则使用非抢占式优先级调度算法。
configUSE_TIME_SLICING 宏定义,若该值为1,则使用时间片轮转调度算法。
configUSE_SHORTER_RESUME_TIME 宏定义,若该值为1,则使用基于最短剩余时间优先的优先级调度算法。
需要注意的是,不同的调度算法对系统的性能和功耗有着不同的影响,选择合适的调度算法应该根据具体的应用场景和系统要求进行
如何理解抢占式调度算法
在FreeRTOS的抢占式调度算法中,任务的优先级越高,调度的机会就越多。当优先级更高的任务就绪时,会立即抢占正在执行的任务,即将当前正在执行的任务挂起,然后立即切换到优先级更高的任务进行执行。
这种调度算法保证了高优先级任务的实时性,可以确保在紧急情况下优先执行高优先级任务。由于抢占式调度算法可以在任何时候强制切换任务,因此可以更灵活地响应外部事件或其他高优先级任务的需求。
在FreeRTOS中,抢占式调度算法是默认的调度算法。通过配置文件或者代码中的宏定义,可以开启或关闭抢占式调度算法,也可以配置其他的调度算法,以满足不同应用场景和要求开启方式在上面
如何理解非抢占式调度算法
在FreeRTOS的非抢占式调度算法中,任务的优先级越高,调度的机会就越多。但是当正在执行的任务被抢占时,只有等到任务主动让出CPU或者发生中断时才会进行调度。也就是说,当前正在执行的任务只有在自己主动让出CPU时才会被挂起,而不是被强制抢占。【非抢占式的缺点】
这种调度算法在实现简单、效率高【非抢占的优点】的同时,也有一定的局限性。因为任务只有在主动让出CPU时才会进行调度,所以无法保证高优先级任务在紧急情况下及时得到执行,从而可能影响系统的实时性。
如何理解非抢占式调度算法
在FreeRTOS的时间片调度算法中,系统会将CPU时间分成若干个固定长度的时间片,每个任务在调度时被分配一个时间片,并在时间片用尽之后被强制挂起,以便其他任务获得执行机会。如果任务在时间片用尽之前主动让出CPU,那么剩余时间片将被保存,并在任务下一次执行时继续使用。
时间片调度算法可以提高系统的公平性,确保所有任务都有机会得到执行。此外,时间片调度算法还可以平衡系统中任务的负载,从而提高系统的性能和效率。
需要注意的是,开启时间片调度算法会增加系统的开销,因为需要进行时间片的切换和维护。
如何理解非抢占式调度算法
FreeRTOS的剩余时间优先(SRT)的优先级调度算法是一种动态优先级调度算法,它的优先级是根据任务剩余执行时间的大小动态调整的。具体来说,每个任务的优先级是根据任务的执行时间、已经使用的CPU时间以及优先级衰减因子来计算的。在SRT算法中,系统会选择当前剩余执行时间最短的任务作为下一个执行的任务。如果有多个任务具有相同的剩余执行时间,那么根据它们已经使用的CPU时间和优先级衰减因子进行调度。SRT算法可以确保执行时间短的任务优先执行,从而提高系统的响应速度和实时性。但是,SRT算法需要实时跟踪任务的剩余执行时间和已经使用的CPU时间,增加了系统的开销和复杂度。
如何获取FreeRTOS源码
访问FreeRTOS官方网站(https://www.freertos.org/)。
单击“Download FreeRTOS”按钮,该按钮将带您进入FreeRTOS的下载页面。
在下载页面中,您可以选择要下载的FreeRTOS版本和格式(zip、tar.gz等)。
下载完成后,解压缩压缩包,即可获得FreeRTOS的源代码。
需要注意的是,FreeRTOS支持多种不同的硬件平台和编译器,因此需要选择与我们目标平台和编译器相对应的版本和格式。