mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-25 23:11:02 +08:00
Merge pull request #19323 from wxy/20200603-Code-your-hardware-using-this-open-source-RTOS
PRF&PUB:20200603 Code your hardware using this open source RTOS
This commit is contained in:
commit
d7bac0d731
@ -1,30 +1,32 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (silentdawn-zz)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-12518-1.html)
|
||||
[#]: subject: (Code your hardware using this open source RTOS)
|
||||
[#]: via: (https://opensource.com/article/20/6/open-source-rtos)
|
||||
[#]: author: (Zhu Tianlong https://opensource.com/users/zhu-tianlong)
|
||||
|
||||
使用 RT-Thread 实时操作系统驱动你的硬件
|
||||
======
|
||||
编程驱动一个微处理器芯片是相当有难度的,但在嵌入式系统开发上,实时操作系统可以为你解决很多此类的困难。
|
||||
![Puzzle pieces coming together to form a computer screen][1]
|
||||
|
||||
> 编程驱动一个微处理器芯片是相当有难度的,但在嵌入式系统开发上,实时操作系统可以为你解决很多此类的困难。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202008/15/065451hu3784opp7p74qtp.jpg)
|
||||
|
||||
从通用计算的角度,操作系统是提供计算机基本功能的一组软件。操作系统保证了计算机硬件可以探测并响应外围器件(如键盘、屏幕、移动设备、打印机等),并管理内存空间和外部存储空间。
|
||||
|
||||
虽然一个 CPU 核心同一时间只能运行单个线程,但现代操作系统可以使多个程序表现的像是在同时运行。每一个任务执行的如此之短,一系列任务切换的如此之快,以至于看起来多个任务像是在并行进行。这一切都是由 _调度器_ 的子进程来控制的。
|
||||
虽然一个 CPU 核心同一时间只能运行单个线程,但现代操作系统可以使多个程序表现的像是在同时运行。每一个任务执行的如此之短,一系列任务切换的如此之快,以至于看起来多个任务像是在并行进行。这一切都是由一个叫做 *调度器* 的子进程来控制的。
|
||||
|
||||
操作系统通常是为计算机准备的,安装在硬盘上,管理计算机所要执行的任务。
|
||||
|
||||
### 为什么实时操作系统对嵌入式系统而言不可或缺
|
||||
|
||||
我曾经在 2008 年接触过嵌入式软件,那时候我还是一名学生,正在学习 [MCS-51][2] 微处理器编程。因为我的主修专业是计算机科学,我在其它课程中的所有程序都是在 PC 上执行的。为微处理器芯片编程是完全不同的体验。人生中第一次,我看到我的程序在裸板上运行,即使到现在我仍然记得,在我看到自己人生中第一个循环点灯程序成功运行时的那种兴奋和激动。
|
||||
我曾经在 2008 年接触过嵌入式软件,那时候我还是一名学生,正在学习 [MCS-51][2] 微处理器编程。因为我的主修专业是计算机科学,我在其它课程中的所有程序都是在 PC 上执行的。为微处理器芯片编程是完全不同的体验。人生中第一次,我看到我的程序在裸板上运行,即使到现在我仍然记得,在我看到自己人生中第一个走马灯程序成功运行时的那种兴奋和激动。
|
||||
|
||||
但那种兴奋转瞬即逝。随着为裸板写出越来越多的程序,我遇到了越来越多的问题。这种沮丧并不是我独有的。直接为芯片写程序很困难,这也是 PC 要运行操作系统的很重要的原因。不幸的是,微处理器芯片(或嵌入式系统)通常是没有操作系统的,它们只能采用”硬编码“的方式编程,没有操作系统帮助你管理代码的运行。
|
||||
但那种兴奋转瞬即逝。随着为裸板写出越来越多的程序,我遇到了越来越多的问题。这种沮丧并不是我独有的。直接为芯片写程序很困难,这也是 PC 要运行操作系统的很重要的原因。不幸的是,微处理器芯片(或嵌入式系统)通常是没有操作系统的,它们只能采用“硬编码”的方式编程,没有操作系统帮助你管理代码的运行。
|
||||
|
||||
在以”硬编码“的方式为处理芯片编写代码的时候,可能会遇到下列问题:
|
||||
在以“硬编码”的方式为处理芯片编写代码的时候,可能会遇到下列问题:
|
||||
|
||||
#### 并发
|
||||
|
||||
@ -34,11 +36,11 @@
|
||||
|
||||
从软件工程的角度,高內聚低耦合原则在软件开发过程中被不厌其烦的频频强调,但是嵌入式软件的不同模块之间常常是重度耦合的,很多功能都集中在一个巨大的 `while (1)` 循环中,很难切分为模块。设计低耦合软件在编程上只是繁琐一些,但在嵌入式系统上,要低耦合就难以编写比较大型的软件。
|
||||
|
||||
与此同时,如果使用了看门狗定时器,程序员还得在调用延时函数时倍加小心。如果延时时间太长,主程序没有得到及时”喂狗“的时机,那么看门狗将在程序运行过程中被触发。嵌入式系统软件开发过程中,需要考虑的东西太多了,即便是个简单的延时函数,都不能掉以轻心。软件越复杂,就越需要细心,越需要想方设法将一系列具有精细时间关系的交互功能拆分为模块。
|
||||
与此同时,如果使用了看门狗定时器,程序员还得在调用延时函数时倍加小心。如果延时时间太长,主程序没有得到及时“喂狗”的时机,那么看门狗将在程序运行过程中被触发。嵌入式系统软件开发过程中,需要考虑的东西太多了,即便是个简单的延时函数,都不能掉以轻心。软件越复杂,就越需要细心。想象一下,试图将这一系列具有精细时间关系的交互功能拆分为模块会怎么样。
|
||||
|
||||
#### 软件生态
|
||||
|
||||
很多厉害的软件组件依赖于其所基于的底层操作系统的实现。举个自身的例子,我曾开发过一个基于 [FreeModbus][3] 的开源项目,原计划将它移植到多种平台上,包括裸板。相对于在各种操作系统上的移植,有些函数在裸板上实现的话实在是太复杂了,以至于无法完成。更糟糕的是,很多硬件平台因为缺乏一致性,只能各自从头做起。
|
||||
很多高级的软件组件依赖于其所基于的底层操作系统的实现。举个自身的例子,我曾开发过一个基于 [FreeModbus][3] 的开源项目,原计划将它移植到多种平台上,包括裸板。但与适应不同操作系统的便利性相比,有些功能过于复杂,无法在所有裸机板上实现。更糟糕的是,很多硬件平台因为缺乏一致性,只能各自从头做起。
|
||||
|
||||
直至现在,我的 Modbus 栈仍然不支持在裸板上运行。
|
||||
|
||||
@ -50,13 +52,14 @@
|
||||
|
||||
#### 重用性
|
||||
|
||||
重用性依赖于模块化。没谁愿意翻来覆去做一成不变的事,对程序员而言更是如此。这不单单是浪费时间,更要命的是这使得代码的维护异常复杂。尤其是,因为功能的实现依赖于底层的硬件,使用了不同芯片的不同种硬件平台上,同样的功能不得不针对每个硬件平台进行适配。这种情况下,重新发明轮子是无法避免的。
|
||||
重用性依赖于模块化。没谁愿意翻来覆去做一成不变的事,对程序员而言更是如此。这不单单是浪费时间,更要命的是这使得代码的维护异常复杂。尤其是,因为功能的实现依赖于底层的硬件,使用了不同芯片的不同硬件平台上,同样的功能必须适配不同的硬件平台。这种情况下,重新发明轮子是无法避免的。
|
||||
|
||||
### 实时操作系统的优势
|
||||
|
||||
幸运的是,现在有针对各种微处理器芯片的操作系统可用,它们被称为实时操作系统(RTOS),和大多数操作系统一样,它们拥有调度器,保证代码以可预见的顺序运行。
|
||||
幸运的是,现在有针对各种微处理器芯片的操作系统,它们被称为实时操作系统(RTOS),和大多数操作系统一样,它们拥有调度器,保证代码以可预见的顺序运行。
|
||||
|
||||
我是在 2010 年初次在裸板上使用实时操作系统。那时候,[STM32][4] 系列微处理器(MCU)开始流行,因为这种微处理器性能强大、功能丰富,很多人在上面跑操作系统。我使用的是 [RT-Thread][5] 操作系统,有很多基于它的现成组件可用。它使用的是 Apache 2.0 许可,和其它操作系统相比,我觉得这个很舒心。我已经基于它作为平台从事开发工作 10 年了。
|
||||
|
||||
我是在 2010 年初次在裸板上使用实时操作系统。那时候,[STM32][4] 系列微处理器(MCU)开始普及,因为这种微处理器性能强大、功能丰富,很多人在上面跑操作系统。我使用的是 [RT-Thread][5] 操作系统,有很多基于它的现成组件可用。它使用的是 Apache 2.0 许可,和其它操作系统的许可相比,我觉得这个很舒心。我已经基于它作为平台从事开发工作 10 年了。
|
||||
使用实时操作系统为裸板编程,操作系统为我们解决了需要处理的大部分问题。
|
||||
|
||||
#### 模块化
|
||||
@ -69,7 +72,7 @@
|
||||
|
||||
#### 实时性
|
||||
|
||||
实时操作系统从设计上就具备实时性。每个线程都被指定了特定的优先级,重要的线程设置为更高的优先级,不重要的线程优先级也低。正是以这种方式,软件整体的实时性得到了保证。
|
||||
实时操作系统从设计上就具备实时性。每个线程都被指定了特定的优先级,比较重要的线程设置为更高的优先级,不重要的线程优先级也低。正是以这种方式,软件整体的实时性得到了保证。
|
||||
|
||||
#### 开发效率
|
||||
|
||||
@ -87,11 +90,11 @@ RT-Thread 丰富的软件生态为大量的从业者带来了巨大的改变。
|
||||
|
||||
![LkdGui][6]
|
||||
|
||||
使用像 LkdGui 这样兼具扩展性和健壮性的功能库,程序员们可以在伙伴已有工作成果的基础上充分施展自己的才能。而这一切,没有实时操作系统这样一个统一的基础,是根本不可能的。
|
||||
使用像 LkdGui 这样兼具扩展性和健壮性的功能库,程序员们可以在同行已有工作成果的基础上充分施展自己的才能。而这一切,没有实时操作系统这样一个统一的基础,是根本不可能的。
|
||||
|
||||
### 试用 RT-Thread
|
||||
|
||||
作为开源极客,我已經在 GitHub 上开源了一些嵌入式软件。在发布开源软件之前,我很少对他人谈及自己曾经的项目,因为不同的人在使用各种不同的微处理器芯片和硬件平台,我的代码极可能无法在他人的板子上运行。 类似于 RT-Thread 的操作系统极大的提升了软件的可重用性,所以全世界的不同领域的专家得以就同一个项目展开探讨。这鼓励着越来越多的人分享和交流各自的项目。如果你在做裸板的软件开发,下次可以试试 TR-Thread。
|
||||
作为开源极客,我已经在 GitHub 上开源了一些嵌入式软件。在发布开源软件之前,我很少对他人谈及自己曾经的项目,因为不同的人在使用各种不同的微处理器芯片和硬件平台,我的代码极可能无法在他人的板子上运行。类似于 RT-Thread 这样的实时操作系统极大的提升了软件的可重用性,所以全世界的不同领域的专家得以就同一个项目展开探讨。这鼓励着越来越多的人分享和交流各自的项目。如果你在做裸板的软件开发,下次可以试试 TR-Thread。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -99,8 +102,8 @@ via: https://opensource.com/article/20/6/open-source-rtos
|
||||
|
||||
作者:[Zhu Tianlong][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[silentdawn-zz](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[silentdawn-zz](https://github.com/silentdawn-zz)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
Loading…
Reference in New Issue
Block a user