嵌入式软件工程师

嵌入式从入门到精通的学习攻略

好久不见. 提交于 2020-02-29 19:30:41
近几年,嵌入式系统产品渐渐完善,并在全世界各行业得到广泛应用。2004年,全球嵌入式系统产品的产值已达2000亿美元,国内嵌入式软件的产值也达到600亿人民币。据预测,随着Internet的迅速发展和廉价微处理器的出现,嵌入式系统将在日常生活里形成更大的应用领域。 嵌入式软件工程师学习路线推荐: 一、嵌入式软件编程的基础 这一阶段重点打好嵌入式软件编程的基础,包括学习Linux系统的基本应用,Linux的常用命令、C语言编程基础、常用的数据结构。 特别是C语言中对指针的理解和应用。信盈达小编告诉你这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 必学内容有:Linux Ubuntu操作系统安装、使用、Linux常用命令、samba服务器、SSH远程登录GCC编译器、GDB调试器、VI编辑器。 1、嵌入式C语言高级编程 2、C数据类型、控制语句 3、C程序结构设计、数组、函数、预处理: 4、指针及字符串操作 5、结构体、共用体、宏、枚举 6、文件I/O操作 嵌入式中物联网开发学习 1、了解物联网、泛在网、互联网基本要领及其关系 2、熟悉RFID从低频段到高频段的基本工作原理,以及RFID标签的种类与行业应用,读卡器原理与通信过程 3、熟悉TI的cc2530的基本应用,包含基本硬件资源,协议栈相关接口使用,以及点对点通信、星形通信

为什么说嵌入式开发比单片机要难很多?谈谈单片机和嵌入式的经验

巧了我就是萌 提交于 2020-02-19 11:37:37
单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本人对这两个概念的理解和感悟。 首先明确概念,什么是单片机,单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。 比如最经典的51系列单片机,如下图所示,外观只是一块一个拇指大小的长方体芯片,共40个引脚,里面包含了逻辑运算单元。实际上也就是一个cpu。 在最开始接触单片机的时候,还曾经有过一个疑问,为什么单片机是黑色的而不可以是别的颜色,后来才知道是单片机材料的限制。 对单片机而言,其实一个芯片就是全部,其他的比如单片机最小系统都是为了单片机的正常运作而加入其他元件,比如晶振,5v电源,电感电阻等。当然最小系统只能保证单片机正常运行,几乎实现不了基于单片机的任何应用。 为了使单片机实现应用,必须要加入其他外设。比如按键,led灯,led屏,蜂鸣器,各种sensor。这也就是市面上很多公司都在做的单片机开发板。 总结

编写优质嵌入式C程序

╄→гoц情女王★ 提交于 2020-01-12 00:05:08
原文地址: http://blog.csdn.net/zhzht19861011/article/details/45508029 前言: 这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性、对未定义行为的处理以及一些高级应用;在此基础上,介绍了防御性编程的概念,提出了编程过程中就应该防范于未然的多种措施;提出了测试对编写优质嵌入式程序的重要作用以及常用测试方法;最后,本文试图以更高的层次看待编程,讨论一些通用的编程思想。 1. 简介 市面上介绍C语言以及编程方法的书数目繁多,但对如何编写优质嵌入式C程序却鲜有介绍,特别是对应用于单片机、ARM7、Cortex-M3这类微控制器上的优质C程序编写方法几乎是个空白。本文面向的,正是使用单片机、ARM7、Cortex-M3这类微控制器的底层编程人员。 编写优质嵌入式C程序绝非易事,它跟设计者的思维和经验积累关系密切。嵌入式C程序员不仅需要熟知硬件的特性、硬件的缺陷等,更要深入一门语言编程,不浮于表面。为了更方便的操作硬件,还需要对编译器进行深入的了解。

嵌入式学习路线

你说的曾经没有我的故事 提交于 2019-12-24 03:03:43
1、打好嵌入式软件编程的基础 这一阶段重点打好嵌入式软件编程的基础,包括学习Linux系统的基本应用,Linux的常用命令、C语言编程基础、常用的数据结构。 特别是C语言中对指针的理解和应用。这一阶段的主要目的是 学习编程语言 、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 这一阶段推荐的嵌入式学习书籍如下:《C程序设计语言》,《C语言核心技术》,《数据结构与算法分析--C语言描述》,《C和指针》,《C陷阱与缺陷》,《C++ Primer》 ,作为嵌入式软件工程师还要有一定的数字电路及模拟电路基础 2、学习ARM体系结构编程 这一阶段才是真正的嵌入式编程,首先我们要选择一款嵌入式CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛, 这一阶段重点是学习嵌入式CPU的裸机编程,熟悉中断、定时器、串口、NAND FLASH、网络控制器、LCD屏、触摸屏等常用嵌入式外围设备的硬件工作原理 , 以及如何使用C语言来编程、控制这些硬件 。这一阶段除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识,但是 对于嵌入式软件工程师来讲,重点是学习硬件的工作原理 ,在掌握硬件工作原理的基础上,对硬件进行编程控制。这和硬件工程师学习的侧重点有所不同。 这一阶段对应的学校的课程主要包括模拟电路、数字电路、微机原理和单片机 。 这一阶段重点是要看CPU的芯片手册

嵌入式软件工程师经典面试题

[亡魂溺海] 提交于 2019-12-23 21:01:56
1、int a[10]={1,2,3,4,5,6,7,8,9,0}; int *p=&a[1]; 则p[6]等于8 2、整数数组清零:bzero(),memset()。 3、sizeof();测试变量所占地址的字节数 4、 main() { char *str[]={“ab”,“cd”,“ef”,“gh”,“ij”,“kl”}; char t; t=(str+4)[-1]; printf("%s",t); }则显示"gh" 5、小端:低位字节数据存储在低地址 大端:高位字节数据存储在低地址 例如:int a=0x12345678;(a首地址为0x2000) 0x2000 0x2001 0x2002 0x2003 0x12 0x34 0x56 0x78 大端格式 6、异步IO和同步IO区别 如果是同步IO,当一个IO操作执行时,应用程序必须等待,直到此IO执行完,相反,异步IO操作在后台运行, IO操作和应用程序可以同时运行,提高系统性能,提高IO流量; 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行,而异步文件IO中, 线程发送一个IO请求到内核,然后继续处理其他事情,内核完成IO请求后,将会通知线程IO操作完成了。 7、用变量a定义 一个整型数 int a; 一个指向整型数的指针 int a; 一个指向指针的指针

目前适合去学的行业,绝对适合你!

狂风中的少年 提交于 2019-12-06 10:22:15
------------恢复内容开始------------ 目前,想要提高职业职能的人都有这几个疑问: · 想要转IT,但我年龄比较大了怎么办? · IT行业男生偏多,是不是不适合女生呢? · 代码逻辑差,适合学什么呢? · 想要挣钱,但不想加班太多咋办? 信盈达学院小编 想说有这样一个岗位特别适合你: 这个岗位不怕你年龄大,反而越老越吃香。 这个岗位不在乎你是 20岁,还是40岁,多大年龄都能极快上手。 这个就是嵌入式 IT行业! 下面一份详细的嵌入式学习规划,送给你,让你少走弯路。 1、打好嵌入式软件编程的基础 这一阶段重点打好嵌入式软件编程的基础,包括常用的数据结构,特别是 C语言中对指针的理解和应用。这一阶段的主要目的是学习编程语言、开发环境、和培养自己的编程思维,为进一步学习嵌入式开发打下良好的基础。 2、学习ARM体系结构编程 这一阶段才是真正的嵌入式编程,首先我们要选择一款嵌入式 CPU和一款嵌入式开发平台,目前ARM 嵌入式CPU应用最广泛,这一阶段重点是学习嵌入式CPU的裸机编程: * 熟悉中断 * 定时器 * 串口 * NAND FLASH * 网络控制器 * LCD屏、触摸屏 * I2C 设备 * SPI 设备 常用嵌入式外围设备的硬件工作原理,以及如何使用 C语言来编程、控制这些硬件。这一阶段除了要学习对硬件编程之外,还需要学习嵌入式硬件的知识

感想

不打扰是莪最后的温柔 提交于 2019-12-04 11:49:44
第一次写博客,本人专业物联网工程,一所普通二本,最近被秋招弄的头皮发麻,迫于压力一开始还选择了一些与本专业所学无关的工作去面试,个人建议还是遵循本心吧,不要着急,专业对口的工作其实是有的,最近在boss网申,于是今天去了上海面了一家嵌入式软件工程师,面试还行,还会有二面,不过更加确定了自己以后要走的路,往嵌入式方向走,偏硬件。 大学没有用心,现在后悔莫急,以后坚持学习,我想成为一名强大的程序猿嘻嘻。以后博客会写关于c/c++、qt、stm32嵌入式的知识总结。共勉。 来源: https://www.cnblogs.com/jkjk/p/11861029.html

嵌入式软件工程师面经

与世无争的帅哥 提交于 2019-12-02 12:09:28
经过几个月的惨烈秋招,终于上岸linux开发,现总结一些秋招经验,希望对下一届或者准备春招的同学有帮助。 楼主双非本科,非大神,7月份才开始制作简历投,网投了差不多7、80家公司,基本上石沉大海,最后改变策略,从9月中开始转参加校宣讲会,可以从应届生求职网、梧桐果app看各公司宣讲会的举行时间和地点,专挑有现场笔试的公司去,这样笔试过了可以直接面试,不会卡在简历上,c基础扎实的笔试基本都可以过(听技术官说你卷面100分有60就可以了),当然线上笔试就不一样了,线上你可能要和几百人甚至上千人一起竞争某一岗位,难度可想而知,楼主半年内参加了c厂三次笔试才得到二面机会,所以还是建议多跑宣讲会面试,广东it类公司的宣讲会基本集中在华工,还有广工。下面是整理一些面试过的公司的面经 2019.07.15 奥威亚 嵌入式软件工程师 电话面: 1、tcp、udp的区别 2、http 、get 、post的传输过程 3、虚拟文件系统的作用 笔试: sizeof、strlen的区别 已知画点函数,求出圆心坐标 已知3个点坐标,求出圆心坐标 一个数组,求出堆栈过程可能出现的所有情况 实现归并排序 h264 、i、p、b帧的含义 3道数电模电考的触发器、锁存器楼主直接放弃 翻译一段内核映射的英语文章 技术面: tcp、udp的区别 tcp如何保证是可靠的 一个字节,保证第二个位为1,如何操作

嵌入式软件工程师面试(3)

女生的网名这么多〃 提交于 2019-11-27 03:46:06
1、Norflash与Nandflash的区别 (1)NAND闪存的容量比较大 (2)NORflash采用内存的随机读取技术。各单元之间是并联的,对存储单元进行统一编址,所以可以随机访问任意一个字。既然 是统一编址,NORflash就可以芯片内执行,即应用程序可直接在flash内运行,而无需先拷贝到RAM。 (3)NOR flash有更快的读取速度, NAND flash有更快的写、擦除速度。 2、反码:对原码除符号位外的其余各位逐位取反就是反码 补码:负数的补码就是对反码加1 正数的原码、反码、补码都一样 3、内存管理MMU的作用 其功能是把虚拟地址映射为物理地址。 4、ROM与RAM ROM是只读存储器,掉电不丢失。 RAM是读写存储器,掉电丢失。 5、signed char 的取值范围-128~127. 6、关键字static的作用是什么 static用来修饰一个局部的变量的时候, 生命域是全局的 作用域是局部的 static用来修饰一个模块内的(某一个C的源程序文件)全局变量的时候 生命域不变 作用域减小,只在本模块内有效 static用来修饰一个函数的时候 作用域减小,只在本模块内有效 来源: https://blog.csdn.net/huhuandk/article/details/99330908