嵌入式系统通常用 C 进行编程,尽管在代码空间或时序非常紧张(或者没有像样的 C 编译器可用)时,有些系统在该范围的末端使用汇编程序,而在另一端,C++ 高达 . NET 紧凑型。这取决于您所说的嵌入式系统的含义,它们从具有几百字节 RAM 和程序空间的小型微控制器,到运行完整的多任务操作系统和用户界面的智能手机类型的设备。
Embedded systems are generally programmed in C, although there are systems at the ends of the range which use assembler when code space or timing is really tight (or there is no decent C compiler available), and at the other end, C++ up to .NET compact. It depends on what you mean by embedded systems, they go from really small microcontrollers with a few hundred bytes of RAM and program space, up to the smartphone type of device running a full multitasking operating system and user interface.
You'll get further in the higher end of this range without a background in electronics, because its less tied to the hardware and more similar to desktop development. As you go down the range of applications, a knowledge of electronics, analogue and digital, and power supplies, noise issues, compliance issues, heat issues and others all combine to make a really challenging design environment.
The one thing that I have not seen mentioned in the answers so far is that up until now you have probably done most of your coding in the context of an operating system. In many (perhaps most?) cases, with firmware as opposed to software, you will not have the convenience and benefits of coding on top of an operating system. This is why so many of the other answers indicated that a good knowledge of electronics was critical.
As others mentioned, embedded can mean many things. In my world (Aerospace and Defense), we work with real-time operating systems (VxWorks and Integrity are the biggest players) and occasionally Linux. We program in C primarily, although C++ is also used as well if the project has decided to use Object Oriented Programming and Modeling.
So, as for the Pre-Reqs, C for sure. You really need to learn all about C, including BIT wise operations, dealing with hex values, pointers, all the low level stuff. Assembly as well, but I only use it for debugging the hardest stuff nowadays. You need to know enough to read and understand.
I think An Embedded Software Primer is a great start to change your thinking towards embedded. Handling interrupts, real-time issues, etc...
As Mickey mentioned, sometimes you don't even have an OS. In these cases, you usually write your own task manager of some sort, but that usually wouldn't be something for the newbie to start with. Good luck.
Languages: C, Assembler, Processing, Basic and a whole variety of others, it depends on what platform you're using as to what's available.
You might get more specific information if you ask the same question at ChipHacker or Electronics Exchange which are both stack exchange style sites (like this is) but geared to electronics and "physical computing".
You'll want to get pretty comfortable with C and build a solid understanding of assembly. In systems / embedded, usually you're working with small amounts of memory and slower processors, so you need to understand how to use limited resources wisely.
If you're getting into this as a hobby, pick up a gumstix board or an arduino, these dev boards will give you hundreds of hours of learning and fun.
If you're trying to make a career of this, find a job where the projects sound interesting and get your hands dirty. Take every task that comes your way and ask yourself how you can do better and learn from this task.
Learn C. Learn to apply C to all problems. Other languages can wait. Eventually assembly will help and no programmer should be without the use a scripting language.
Depending on what embedded targets you use there could be very little difference between a PC and your target. With little electronics background this would be your easiest entry.
Small processors will give you the the steepest learning curve but you will learn the most about embedded programming. However with no electronic background this can present extra problems you might not have the skills to solve yet.
Eventually you will have to learn electronics if you want to make further progress beyond the basics.
Without a doubt, experience or at least a significant understanding of digital electronics and low level computer engineering is required. You'll need to be able to read device datasheets and understand them. Scopes, multimeters, logic analyzers, etc... are tools of the trade.
C is used mostly, but higher level languages are sneaking in slowly.
Getting started in Embedded Systems is a complex task in itself, because it is a very vast field with numerous options in hardware and software.
What are the languages used to program embedded system programs?
Assembly Language, C, C++, Python, C# and others.
Will I be able to learn without having any basics in electronics?
Learning embedded systems without the basic knowledge of electronics would not be a good idea. Embedded systems is a mix of hardware and software. You can follow the approach of learning-by-doing instead of going through the lengthy and detailed text books.You can refer to this blog to learn embedded systems by doing practicals, step by step. It will help you to get started from the scratch.
Any other prerequisites that I should know?
Basic electronics, digital electronics, knowledge of microcontrollers and C programming. Since you are from computer science background you would need a development board of any 8-bit microcontroller (students of EE and ECE have enough knowledge and background to build it on breadboard or pcb) to get started. (Don't prefer simulators in the start, you might get your concepts wrong!).
VHDL、Verilog 和 FPGA 也是这个领域的重要参与者。凭借良好的计算机科学背景、大量的投入,也许还有一些麻省理工学院的开放课程,你将能够取得一些好的成果。对 cpu 架构和一些 ASM 的深入了解也会大有帮助。
VHDL, Verilog, and FPGA's are serious players in this arena as well. With a good background in CS, plenty of commitment, and maybe some MIT OpenCourseware you'll be able to pull off something good. A good knowledge of cpu architectures and some ASM will go a long way too.
我们使用的语言是 C。但当时,我们开发的设备上的磁盘空间为 4MB,内存为 8MB,我知道使用 C 是因为它的库占用空间很小。显然,性能也是一个标准。
至于基本电子产品,对于入门级职位几乎没有必要。随着时间的推移,您将获得所需的信息和经验。
不是先决条件,但拥有操作系统内部和系统开发经验绝对是一个优势。
I went into that field with no knowledge of how it was done as a fresh graduate and quit after 1,5 years. So, what I say may be a little bit rusty, and definitely not comprehensive.
The language we were using was C. But at that time, the disc space was 4MB and memory was 8MB on the devices we were developing for, and I know that C was used due to its libraries' tiny footprint. Apparently, performance was a criterion as well.
As to basic electronics, for an entry level position almost none is necessary. You will gain the required information and experience with time.
Not prerequisites, but having experience in the operating system internals and system development is definitely a plus.
发布评论
评论(11)
嵌入式系统通常用 C 进行编程,尽管在代码空间或时序非常紧张(或者没有像样的 C 编译器可用)时,有些系统在该范围的末端使用汇编程序,而在另一端,C++ 高达 . NET 紧凑型。这取决于您所说的嵌入式系统的含义,它们从具有几百字节 RAM 和程序空间的小型微控制器,到运行完整的多任务操作系统和用户界面的智能手机类型的设备。
即使没有电子背景,您也将在该范围的高端取得更进一步的进展,因为它与硬件的联系较少,并且与桌面开发更相似。当您深入了解应用范围时,电子、模拟和数字、电源、噪声问题、合规性问题、热量问题等方面的知识结合在一起,形成了一个真正具有挑战性的设计环境。
首先阅读一些链接 此处和embedded.com
Embedded systems are generally programmed in C, although there are systems at the ends of the range which use assembler when code space or timing is really tight (or there is no decent C compiler available), and at the other end, C++ up to .NET compact. It depends on what you mean by embedded systems, they go from really small microcontrollers with a few hundred bytes of RAM and program space, up to the smartphone type of device running a full multitasking operating system and user interface.
You'll get further in the higher end of this range without a background in electronics, because its less tied to the hardware and more similar to desktop development. As you go down the range of applications, a knowledge of electronics, analogue and digital, and power supplies, noise issues, compliance issues, heat issues and others all combine to make a really challenging design environment.
Start by reading some of the links here and embedded.com
到目前为止,我在答案中没有看到提到的一件事是,到目前为止,您可能已经在操作系统的上下文中完成了大部分编码。在许多(也许是大多数?)情况下,使用固件而不是软件,您将无法享受在操作系统之上进行编码的便利和好处。这就是为什么许多其他答案表明良好的电子知识至关重要。
The one thing that I have not seen mentioned in the answers so far is that up until now you have probably done most of your coding in the context of an operating system. In many (perhaps most?) cases, with firmware as opposed to software, you will not have the convenience and benefits of coding on top of an operating system. This is why so many of the other answers indicated that a good knowledge of electronics was critical.
正如其他人提到的,嵌入式可以意味着很多事情。在我的世界(航空航天和国防)中,我们使用实时操作系统(VxWorks 和 Integrity 是最大的参与者),偶尔也使用 Linux。我们主要使用 C 进行编程,但如果项目决定使用面向对象编程和建模,也可以使用 C++。
所以,就先决条件而言,C 是肯定的。您确实需要学习有关 C 的所有知识,包括位明智的操作、处理十六进制值、指针以及所有低级内容。汇编也是如此,但我只用它来调试当今最难的东西。您需要了解足够的知识才能阅读和理解。
我认为嵌入式软件入门是改变您对嵌入式思维的一个很好的开始。处理中断、实时问题等...
正如 Mickey 提到的,有时您甚至没有操作系统。在这些情况下,您通常会编写自己的某种任务管理器,但这通常不适合新手开始。祝你好运。
As others mentioned, embedded can mean many things. In my world (Aerospace and Defense), we work with real-time operating systems (VxWorks and Integrity are the biggest players) and occasionally Linux. We program in C primarily, although C++ is also used as well if the project has decided to use Object Oriented Programming and Modeling.
So, as for the Pre-Reqs, C for sure. You really need to learn all about C, including BIT wise operations, dealing with hex values, pointers, all the low level stuff. Assembly as well, but I only use it for debugging the hardest stuff nowadays. You need to know enough to read and understand.
I think An Embedded Software Primer is a great start to change your thinking towards embedded. Handling interrupts, real-time issues, etc...
As Mickey mentioned, sometimes you don't even have an OS. In these cases, you usually write your own task manager of some sort, but that usually wouldn't be something for the newbie to start with. Good luck.
语言:C、汇编语言、Processing、Basic 以及各种其他语言,这取决于您使用的平台以及可用的语言。
如果您在 ChipHacker 或 ChipHacker 提出相同的问题,您可能会获得更具体的信息/">Electronics Exchange 都是堆栈交换风格的网站(就像这样),但面向电子和“物理计算”。
Languages: C, Assembler, Processing, Basic and a whole variety of others, it depends on what platform you're using as to what's available.
You might get more specific information if you ask the same question at ChipHacker or Electronics Exchange which are both stack exchange style sites (like this is) but geared to electronics and "physical computing".
您需要熟悉 C 语言并对汇编有深入的了解。在系统/嵌入式中,通常您使用少量内存和较慢的处理器,因此您需要了解如何明智地使用有限的资源。
如果您将此作为一种爱好,那么可以选择 Gustix 板或 arduino,这些开发板将为您带来数百小时的学习和乐趣。
如果你想以此为职业,那就找一份项目听起来很有趣的工作,并亲自动手。接受你遇到的每一项任务,问问自己如何才能做得更好,并从这项任务中学习。
不管怎样,祝你编码愉快!
You'll want to get pretty comfortable with C and build a solid understanding of assembly. In systems / embedded, usually you're working with small amounts of memory and slower processors, so you need to understand how to use limited resources wisely.
If you're getting into this as a hobby, pick up a gumstix board or an arduino, these dev boards will give you hundreds of hours of learning and fun.
If you're trying to make a career of this, find a job where the projects sound interesting and get your hands dirty. Take every task that comes your way and ask yourself how you can do better and learn from this task.
Either way, have fun and happy coding!
学习 C。学习将 C 应用于所有问题。其他语言可以等等。最终汇编会有所帮助,任何程序员都应该使用脚本语言。
根据您使用的嵌入式目标,PC 和您的目标之间的差异可能很小。对于没有多少电子背景的人来说,这将是您最简单的入门。
小型处理器将为您提供最陡峭的学习曲线,但您将学到最多的嵌入式编程知识。然而,如果没有电子背景,这可能会带来额外的问题,您可能还没有解决的技能。
如果您想在基础知识之外取得进一步的进步,最终您将必须学习电子学。
Learn C. Learn to apply C to all problems. Other languages can wait. Eventually assembly will help and no programmer should be without the use a scripting language.
Depending on what embedded targets you use there could be very little difference between a PC and your target. With little electronics background this would be your easiest entry.
Small processors will give you the the steepest learning curve but you will learn the most about embedded programming. However with no electronic background this can present extra problems you might not have the skills to solve yet.
Eventually you will have to learn electronics if you want to make further progress beyond the basics.
毫无疑问,需要经验或至少对数字电子和低级计算机工程有深入的了解。您需要能够阅读设备数据表并理解它们。示波器、万用表、逻辑分析仪等都是行业工具。
C 语言被广泛使用,但更高级的语言正在慢慢渗透进来。
Without a doubt, experience or at least a significant understanding of digital electronics and low level computer engineering is required. You'll need to be able to read device datasheets and understand them. Scopes, multimeters, logic analyzers, etc... are tools of the trade.
C is used mostly, but higher level languages are sneaking in slowly.
嵌入式系统入门本身就是一项复杂的任务,因为它是一个非常广阔的领域,在硬件和软件方面有许多选择。
用于编写嵌入式系统程序的语言有哪些?
汇编语言、C、C++、Python、C# 等。
我可以在没有任何电子学基础知识的情况下学习吗?
在没有电子学基础知识的情况下学习嵌入式系统不是一个好主意。嵌入式系统是硬件和软件的混合体。您可以遵循边做边学的方法,而不是通过冗长而详细的教科书。您可以参考这个博客
通过实践,一步一步地学习嵌入式系统。它将帮助您从头开始。
我还应该了解其他先决条件吗?
基础电子学、数字电子学、微控制器和 C 编程知识。由于您具有计算机科学背景,因此您需要任何 8 位微控制器的开发板(EE 和 ECE 的学生有足够的知识和背景在面包板或 PCB 上构建它)才能开始。 (一开始就不要喜欢模拟器,你可能会弄错你的概念!)。
Getting started in Embedded Systems is a complex task in itself, because it is a very vast field with numerous options in hardware and software.
What are the languages used to program embedded system programs?
Assembly Language, C, C++, Python, C# and others.
Will I be able to learn without having any basics in electronics?
Learning embedded systems without the basic knowledge of electronics would not be a good idea. Embedded systems is a mix of hardware and software. You can follow the approach of learning-by-doing instead of going through the lengthy and detailed text books.You can refer to this blog
to learn embedded systems by doing practicals, step by step. It will help you to get started from the scratch.
Any other prerequisites that I should know?
Basic electronics, digital electronics, knowledge of microcontrollers and C programming. Since you are from computer science background you would need a development board of any 8-bit microcontroller (students of EE and ECE have enough knowledge and background to build it on breadboard or pcb) to get started. (Don't prefer simulators in the start, you might get your concepts wrong!).
你必须接受限制并能够处理它们:
奖励是对什么有深刻的理解正在发生。
You have to accept constraints and be able to work with them:
The reward is a deep understanding on what is going on.
VHDL、Verilog 和 FPGA 也是这个领域的重要参与者。凭借良好的计算机科学背景、大量的投入,也许还有一些麻省理工学院的开放课程,你将能够取得一些好的成果。对 cpu 架构和一些 ASM 的深入了解也会大有帮助。
VHDL, Verilog, and FPGA's are serious players in this arena as well. With a good background in CS, plenty of commitment, and maybe some MIT OpenCourseware you'll be able to pull off something good. A good knowledge of cpu architectures and some ASM will go a long way too.
作为一名应届毕业生,我进入这个领域时并不知道它是如何完成的,并在 1.5 年后退出。所以,我说的可能有点生疏,而且绝对不全面。
我们使用的语言是 C。但当时,我们开发的设备上的磁盘空间为 4MB,内存为 8MB,我知道使用 C 是因为它的库占用空间很小。显然,性能也是一个标准。
至于基本电子产品,对于入门级职位几乎没有必要。随着时间的推移,您将获得所需的信息和经验。
不是先决条件,但拥有操作系统内部和系统开发经验绝对是一个优势。
I went into that field with no knowledge of how it was done as a fresh graduate and quit after 1,5 years. So, what I say may be a little bit rusty, and definitely not comprehensive.
The language we were using was C. But at that time, the disc space was 4MB and memory was 8MB on the devices we were developing for, and I know that C was used due to its libraries' tiny footprint. Apparently, performance was a criterion as well.
As to basic electronics, for an entry level position almost none is necessary. You will gain the required information and experience with time.
Not prerequisites, but having experience in the operating system internals and system development is definitely a plus.