嵌入式

好多人说编译器只是工具,重要的在于算法和思想。

这话说的本来没错,但要有一个条件在先:那就是你真正掌握了你所用的编译器。但,真正熟悉编译器的却并不多见。当你深入了解一个编译器后,你能像用汇编一样用C,可以像汇编那样随心所欲的操作MCU!

了解一个编译器,首先应该有汇编的基础,不要求能用汇编编写程序或做过项目,但至少看的懂!不熟悉汇编的嵌入式程序员是不合格的程序员!

了解一个编译器,最好的方法是看它自带的帮助文件,至少要看过Compiler User's Guide ,至少遇到问题会想到到帮助中查找方法,虽然帮助大多是E文。

工作以来一直使用keil MDK编译器,对于这个编译器的界面以及设置大家可以在网上搜一下就找到了,今天我们主要来看一看keil MDK编译器的一些细节,看看这些细节,你知道多少。

1. 在所有的内部和外部标识符中,大写和小写字符不同。

2. 默认情况下,char 类型的数据项是无符号的。它们可以显式地声明为signed char 或 unsigned char。

3.基本数据类型的大小和对齐:

注:

a. 通常局部变量保留在寄存器中,但当局部变量太多放到栈里的时候,它们总是字对齐的。例如局部char变量在栈里以4为边界对齐;

b. 压缩类型的自然对齐方式为1。使用关键字__packed来压缩特定结构,将所有有效类型的对齐边界设置为1.

4. 整数以二进制补码形式表示;浮点量按IEEE格式存储。

5. 有符号量的右移是算术移位,即移位时要保证符号位不改变。

6. 对于int类的值:超过31位的左移结果为零;无符号值或正的有符号值超过31位的右移结果为零。负的有符号值移位结果为-1。

7. 整数除法的余数的符号于被除数相同,由ISO C90标准得出;

8. 如果整型值被截断为短的有符号整型,则通过放弃适当数目的最高有效位来得到结果。如果原始数是太大的正或负数,对于新的类型 ,无法保证结果的符号将于原始数相同。所以强制类型转化的时候,对转换的结果一定要清晰。

9. 整型数超界不引发异常;像unsigned char test; test=1000;这类是不会报错的,赋值或计算时务必小心。

10. 默认情况下,整型数除以零返回零。

11. 对于两个指向相同类型和对齐属性的指针相减,计算结果如下表达式所示:
((int)a (int)b) / (int)sizeof(指向数据的类型)

12. 在严格C中,枚举值必须被表示为整型,例如,必须在2147483648 到+2147483647的范围内。但keil MDK自动使用对象包含enum范围的最小整型来实现(比如char类型),除非使用编译器命令enum_is_int 来强制将enum的基础类型设为至少和整型一样宽。超出范围的枚举值默认仅产生警告:#66: enumeration value is out of "int" range

13. 结构体:
struct {
char c;
short s;
int x;
} //这个结构体占8个字节

但是,结构体:
struct {
char c;
int x;
short s;
} //这个结构体占12个字节

这是为什么?

对于结构体填充,据定义结构的方式,keil MDK编译器用以下方式的一种来填充结构:
定义为static或者extern的结构用零填充;

栈或堆上的结构,例如,用 malloc() 或者 auto定义的结构,使用先前存储在那些存储器位置的任何内容进行填充。不能使用memcmp()来比较以这种方式定义的填充结构!

14. 编译器不对声明为volatile 类型的数据进行优化。 我发现还有不少刚入门的嵌入式程序员从没见过这个关键字.

15. __nop():延时一个指令周期,编译器绝不会优化它。如果硬件支持NOP指令,则该句被替换为NOP指令,如果硬件不支持NOP指令,编译器将它替换为一个等效于NOP的指令,具体指令由编译器自己决定。

围观 571

在编写我们的操作系统之前,我们需要明确一些事情。比如说

· 这个系统的运行环境是什么?
· 怎么编译?
· 基本中断环境是什么?
· 上下文怎么切换?
· 准备实现那些内容?
· 基本数据类型是什么?等等。

(1)你的嵌入式操作系统准备叫什么名称?运行环境是什么?可以在实际环境上面运行吗?
我们准备把这个嵌入式操作系统称之为MiniOS。虽然这个操作系统实现的功能不多,但是麻雀虽小,五脏俱全。一般操作系统该有的功能,MiniOS都会有这个功能。起初,我们会在Linux上运行MiniOS,之后我们会把MiniOS移植到51单片机上去。

(2)操作系统怎么编译?
MiniOS系统采用基本的C语言进行编写,没有汇编语言,但是移植到51上面需要一些汇编语言。编写完C语言文件后,我们需要一个简单的makefile文件,这样就可以实现自动化编译,进一步提高我们开发的效率。

(3)基本中断环境是什么?
因为MiniOS起初是在linux实现运行的,所以它是依靠SIGALRM实现中断调度的。当然在OS中还会有I/O操作,这里我们用信号进行仿真。SIGINT就是一种方法,每当我们使用键盘输入ctrl+C的时候,就会调用相应的函数。这和外设的中断是一模一样的。

(4)上下文怎么切换?
上下文的切换就是堆栈的切换。要弄清楚堆栈的切换,首先你要明白函数,函数里面的数据是怎么安排的,压栈是怎么回事,退栈是怎么回事。这些知识点,我们在后面都会一一介绍。

(5)MiniOS要实现哪些内容?
MiniOS虽然比较小巧,但是操作系统该有的功能它都会有。因此,我们准备实现的下面这些内容,比如说中断开关、互斥量、定时器、线程调度、内存分配都会拥有。

(6)基本数据类型是什么?
为了移植的方便,我们需要对基本数据进行重新定义一下基本数据类型。

(7)把MiniOS移植到51单片机需要做些什么?
其实把MiniOS移植到51上面,其实不困难,只要做到这几个方面就可以了。
a)基本数据类型重新定义;

b)b)中断开关重新进行设置;

c)c)任务切换的压栈、出栈处理。

d)要是做到这里,我们就可以在51单片机上面把自己的OS跑起来了,那是多么开心的一件事情啊。

来源: 嵌入式ARM

围观 320

加班,熬夜,牺牲周末的时间只为了解决一个bug,从懵懂无知到如今的大神,研发之路从来就不是一帆风顺,当你已经熟练掌握各项技能时,是否想起了曾经的你,为什么要学嵌入式?各位同学想知道嵌入式大神是如何成长的吗?今天咱们就一起来看看吧!

首先,来看看嵌入式大神必修课。

1、数据结构

2、计算机原理(包括汇编的)

3、编译原理

4、操作系统

这四门课便是万里路的第一步了,一开始学习切忌浮躁,当你觉得你学的可以的情况下,请考虑以下问题:

不参考任何代码的情况下,能自己写链表吗?

树的遍历呢?

图的最短路径怎么实现?

能自己写小型抢占式内核吗?

如何用c实现语法分析,词法分析?

其次,就可以搞块开发板了

只提一点:先搞裸机(请自动把这句话复述三遍)。

linux接触越早越好,命令越熟越好,vim操作越眼花缭乱越好…

先说单片机吧!!有人说51系列太过时了,但作为新手入门也未尝不可,可在淘宝上买个板子,也可以直接用proteus仿真。请根据自身钱包隆起程度决定。了解下什么是IO、串口通信、中断等,最好用模拟时序的方式用IO引脚写个iic和spi的驱动。

然后你可以学习一下mcu或处理器了~~

建议是ARM,建议先玩裸机,还是和51一样,从点灯开始熟悉。请注意:最好不要一上来就钻到里面把所有的模块都整一遍,因为那样好费时间(,不是不可以,但效果不一定是最好的哟。

学裸机编程其实就是学CPU编程思想,因为你后面肯定不只是用一种CPU,怎么控制引脚,怎么配置寄存器可能每款CPU都不一样。要学到的是这种方法,这种原理。保证你以后拿到一款U可以轻松的把它驱动了。而不是说你这一款用的很好,换另一个就无从下手了!

还是像上面所说的,先把cpu本身的资源搞懂!!IO、中断(就单片机编程来说相当重要)、UART、内存寻址方式等等。

如果可以,学一下它的汇编。如果汇编你也学了,好!!请基于这个u写个时间片的调度器,不用太复杂,运行个多任务就可以了。(这里重点不是写调度器,而是写它的时候会涉及到各种栈操作,现场的保护与恢复,用到大量汇编)。

然后再根据外围的器件做些实验,这就不说了,你会接触到一个东西:datasheet,然后像什么数模模数,语音,lcd屏,按键,时钟芯片,等根据板子的资源放开整吧!!

单片机这块最后说一句:

玩单片机千万别不买开发板!!!!

不玩单片机千万别买开发板!!!!

所以一个合适的板子对于初学者来说至关重要!!!

电子创新网和灵动微电子联合举办的“灵动MM32F103 MiniBoard测评活动” 早已上线,此次我们将会选出50位试用者,只要您报名参与,就有很大机会免费赢取MM32F103 MiniBoard套件一份喔! 精彩活动,不容错过,赶快行动起来吧!

点击下方图片即可进入报名页面,您还在犹豫什么?!

开发板测评图片

围观 409

虽然嵌入式系统已经有30多年的历史,但是原来一直是隐藏在背后的,自从物联网上升为国家战略后,嵌入式系统也从后台走到前台,成为备受瞩目的一部分。

很多学者和业界人士都意识到,嵌入式系统将会迎来前所未有的发展机遇;同时,嵌入式工程师也意识到,随着时代变迁,我们自身的意识也要跟着进步。原来的嵌入式系统是孤立在一个个产品中的独立系统,而如今在物联网时代,这些独立的系统要连接成一个大网,安全性和可靠性都上升到了一个新的高度。不仅如此,嵌入式工程师的关注角度也不能再仅仅局限于技术、产品,而应该树立广义的服务意识,站在更高的角度上统筹嵌入式系统能够给物联网带来哪些服务!《单片机与嵌入式系统应用》小编,邀请到了业内的专家,一起来聊聊关于转型的那点儿事!

专家论道

嵌入式系统联谊会秘书长何小庆

物联网时代,嵌入式工程师应尽快转型

嵌入式工程师转型到物联网开发有两种方式:主动转型和被动转型。主动转型,是指传统的嵌入式工程师看到物联网发展的大趋势,主动在企业内部申请参加与物联网相关的新项目开发工作,或者为企业出谋划策,建议企业将传统产品转型到物联网产品。主动转型的嵌入式工程师会非常关注新的物联网开发平台,积极参加物联网开发技术研讨会,充分利用业余时间学习物联网开发新技术和新知识。被动转型,是指企业本身看到物联网发展趋势,开始着手将产品升级成物联网产品,由此要求嵌入式工程师参与到物联网产品开发之中。

无论是哪种方式的转型,嵌入式工程师只要积极参与到物联网开发当中,努力学习,就一定能顺利地胜任物联网开发工作。因为物联网系统本身就是嵌入式系统的自然延伸,嵌入式系统通过增加无线通信、手机APP和云计算平台实现了物物相连的一个大系统。

当然,学习物联网相关知识,掌握物联网开发所需要的新工具,是必须经历的过程。比如蓝牙和ZigBee通信协议的相关知识、Android 智能手机编程技术,这些都是传统嵌入式工程师以前没有掌握的技术。所幸的是,目前高校已经开设了物联网专业,培训机构以及物联网技术平台企业(比如ST 和NXP 等)都有不错的培训课程,许多出版社已经出版了大量物联网开发书籍,互联网上有许多很好的物联网开发视频教程,开源社区也有许多开源硬件和软件,比如IntelArduino101和FreeRTOS。

现在,学习物联网开发的基础条件很好,关键在于自身。如果你一直抱着等等看、以后再说的想法,随着年龄的增加,学习新技术的热情和能力都会有所下降。物联网时代已经到来,嵌入式工程师应尽快实现转型。

太原理工大学晓明研究室常晓明教授

嵌入式工程师要依靠项目成熟

最近,我与一些学生进行了交流,大家就嵌入式系统工程师这一职业谈了一些看法。归纳起来主要有两个方面:一是担心嵌入式系统工程师的发展前景;二是嵌入式系统涉及的面太广,不知该如何学,从而难以坚持。

第一,关于嵌入式系统工程师的发展前景。本人从事该方面的工作已有40多年。从最初制作硬件到后来软件硬件都做,从开始的单体设计到后来的系统设计,我感到嵌入式领域发展非常迅速,有许许多多的机会,同时也充满了挑战。有一点感受:嵌入式系统越做越有味儿,几十年前许多最基本、最基础的东西不会因器件的迅猛发展而被淘汰,关键是你要跟随时代不断学习新东西。在我看来,嵌入式系统工程师前途一片光明。

第二,嵌入式系统涉及的面确实比纯软件要广。不但需要具有坚实的数学、物理、电路基础、信号与系统、电子线路等功底,还必须有大量的实践经验,而要得到实践经验的环境并不是像做软件那样,有台计算机就基本能解决问题。因此,培养一个成熟的嵌入式系统工程师不是一件容易的事情。例如你没有测试仪器、加工环境、高人指导,确实不容易理解和掌握硬件系统。从这个意义上讲,只有寻找各种机会锻炼自己的软硬件实力,才能不断扩大自己的知识和技术面,得到较快的成长,从而胸有成竹地开展嵌入式应用系统的开发。因此,建议嵌入式爱好者要努力实践,通过项目提高自己,追随老手成熟自己。

江南大学计算机系主任柴志雷副教授

嵌入式产品开发要着眼于服务

传统嵌入式系统的特点是通常未接入互联网、功能相对简单、采用的芯片资源及性能有限,因此嵌入式工程师有能力,同时也需要根据应用的需求深度定制嵌入式系统的软硬件,以获得最优化的效果。进入物联网时代后,嵌入式系统需要更多的互联网化、智能化,功能日趋复杂,同时应用于嵌入式系统的芯片也更为复杂,从芯片到应用的深度软硬件定制已超出嵌入式工程师的个人能力。因此,嵌入式系统的开发也将会向两个方向发展。

一是基于芯片提供特定领域的增值服务。由于系统的复杂性导致嵌入式工程师不再具有从底层定制整套软硬件系统的能力,以及出于对产品开发周期、成本的考虑,面向最终产品的嵌入式工程师越来越多地希望基于服务而非基于裸片开发。另外,由于物联网时代嵌入式系统应用场景多样化,基于芯片的中间件或服务也呈现多样化、专业化,会给开发特定领域服务的嵌入式工程师带来机会。

二是基于服务的嵌入式产品开发。同样基于前面分析,面向最终产品的嵌入式开发工程师也将不再直接从芯片裸片开始开发产品,而是选择具有良好中间件或服务等生态系统的芯片作为产品的平台。这一趋势从近年来Arduino受欢迎的程度便可知晓。另外,手机上的APP开发实际上也是基于服务的嵌入式系统开发,未来更多领域的嵌入式系统也会逐步采用类似的开发模式。

网友杂谈

#include

随着时代的变迁,嵌入式系统从后台走到了前台,传统的嵌入式概念也得到了延伸。了解时下最火的科技名词,如3D打印、无人机、VR、机器人、人工智能、工业4.0等,可以知道相比于传统嵌入式,如今的嵌入式开发需要更强的控制器、更大的RAM、更快更安全的网络性能,同时需要结合传感器和云计算技术。显然,对嵌入式工程师的要求更高了,类似于制造业产业升级,我们嵌入式工程师也要升级!

一个永恒的主题是学习,不管处于哪个层级,只有不断学习,才能紧跟时代步伐。这里想特别说一下开源。如今的世界是开放的,软件的开源运动所造成的影响不容忽视,嵌入式工程师在开发产品时不能像以前一样封闭,应积极融入开源社区,以开放的态度去学习。正所谓海纳百川,有容乃大。另外,由于知识的爆炸性增长,嵌入式工程师需要重视对知识的管理,所谓好记性不如烂笔头,多写技术博客,有利于总结经验,提高开发速度。同时由于开发模式的转变,如今的嵌入式开发是模块化的开发,会更便捷、更注重成本和用户体验,所以嵌入式工程师应该提高服务意识,不能只考虑技术问题,要多从客户、用户角度思考问题。我曾想,以后会不会出现以服务为核心竞争力的科技企业呢? 最后,在机遇与挑战并存的今天,嵌入式工程师应该多实践、多思考、多交流,但也不能在浪潮中迷失自我,还是需要花点时间沉淀下来,用心做好对社会有价值的产品。

yoummiegao

将产品融入物联网大网,硬件同质化,更多的价值体现在后期服务上,也许会有更多的软件工作,也许会向系统工程师转型!

傅羿

用电视剧老九门的一句台词开始:入此门者,当放下一切希望! 不过切勿理解错了,不是做嵌入式没有希望,而是说,进入嵌入式的门,放下的越多,才会收获的越多!

今天,知识爆炸并不稀奇,但是,却引发了职业更迭的担忧。如今大数据、人工智能、物联网火爆异常,应该说,一定会给我们现在的生活带来极大冲击。所以,嵌入式工程师要顺应时代的发展潮流,拥抱并融入智能时代的浪潮。自信地说,我们在社会所处的工作位置至关重要,再智能的软件也不能缺少一个优秀的硬件作为支撑。今后我们应该往智能化方向转型,在硬件和软件之间找到最佳平衡点,将嵌入式也智能化。简言之,是不是被时代所宠爱,就要看我们怎样把嵌入式设计和智能应用结合。至于转型,我看还是有必要的,就叫“新嵌入式”工程师。

编辑观点

物联网时代,给嵌入式工程师提供了广阔的施展舞台。嵌入式工程师在深钻技术的同时,尽可能树立一种服务意识,小到监测身体指标,大到一个城市的交通系统,从而更了解自己所掌握的技术应用其中,最终能够给用户带来哪些服务和体验。例如,交通处罚由罚车改为罚人,只有工程师才最清楚以目前的技术水平是否可以实现。

所以这里的服务,并非我们理解的狭义上的服务,而是站在更高层次上的服务,是对大局的服务,这也正是技术的最终归宿!

文章来源:嵌入式资讯精选

(直接点击图片可进入调查页面)

开发板测评图片
围观 341

近日,市场研究机构Gartner Research的副总裁兼资深研究员大卫·卡利(David Cearley)宣布并解释了该机构对2017年十大战略技术趋势的预测研究成果。

下面是Gartner Research预测的十大趋势:

趋势1:AI和高级机器学习(AI and Advanced Machine Learning)

人工智能(AI)和高级机器学习(ML)由深度学习、神经网络以及自然语言处理等技术组成,其中还可以包括理解、学习、预测和适应和潜在地自主操作的高级系统。

卡利在举例子的时候指出,像是零售商店的服务以及消费的电子产品。他接着说道,应用AI和高级的机器学习可以帮助一系列的设备和服务实现智能化,其中包括物理设备(机器人、自主车辆、消费电子)、应用以及服务(虚拟个人助理、智能顾问)。

趋势2:智能应用(Intelligent Apps)

智能应用程序在很多情况下执行的是人类助手一样的功能。卡利表示,在他的一项最近工作中,虚拟个人助手和虚拟客服(VPN)可以帮助他进行日程会议安排以及管理电子邮件和其他的消息提醒。

卡利提到,在未来的十年里,几乎每一款应用程序、服务都将包含一定程度的AI技术。这将形成一个长期的趋势,这些趋势也将会促进AI和机器学习的发展,并增加在应用和服务中的使用范围。

趋势3:智能对象(Intelligent Things)

智能对象将会利用人工智能和机器学习技术与人类及其周围环境进行交互互动。比较典型突出的例子就是自动驾驶汽车、无人机,以及未来将会出现越来越多的智能厨房和智能家居产品。

趋势4:虚拟现实和增强现实(Virtual and Augmented Reality)

虚拟现实(VR)和增强现实(AR)已经捕捉到了很多游戏玩家和其他消费者的想象力,但它们未来将会对企业产生难以想象的影响。

卡利表示,“在2021年之前,沉浸式的消费方式、业务内容以及应用程序将会得到快速的发展。VR和AR的功能将与数字网格相结合,形成更加无缝的设备系统。这个系统可以整合来自用户的信息流,为用户提供超个性化的应用程序和服务。

趋势5:数字孪生(Digital Twin)

数字孪生操作实际上是对元数据、条件或状态、事件数据和分析的交集进行运行处理。

卡利预测到,在未来的十年里,将会出现数以亿计的数字孪生。它们将被企业用于规划设备服务、经营工厂、预测设备什么时间会出现故障、如何提高运营效率,以及帮助新产品的开发等等。

趋势6:区块链和分布式分类账(Blockchain and Distributed Ledgers)

区块链是一种分布式的账本,其中的价值交换交易被有顺序地分组成块。

每个区块都与迁移块区块相连,这个过程中在特别加密的P2P网络中最常见。卡利认为,未来区块链技术将会分为音乐发布、身份验证、权利登记以及供应链等领域,使用率会越来越高。

趋势7:对话系统(Conversational Systems)

对话用户界面(UI)可以从简单的非正式向双向对话转变,比如收集来自犯罪证人的口头证词,以此来生成嫌疑人的图像草图。

对话系统将从聊天机器人演化到更广泛的数字网格,而数字网将扩展成为更大范围的端点的集合体,我们将会每天利用它们进行交互互动。

趋势8:网格应用和服务体系架构(Mesh App and Service Architecture)

智能数字网格将会改变解决方案的架构、技术和工具。网格应用和服务体系架构(MASA)包括网络、移动、桌面以及物联网应用程序。它们将会通过物联网连在一起,并将会展示多层次和跨越传统边界的API。这将有助于促进服务的可拓展性、敏捷性和技术的再次利用。服务体系架构将促进网络中不断端点之间的渠道连续体验的优化,无论是智能手机还是汽车。

趋势9:数字技术平台(Digital Technology Platforms)

数字技术平台是数字业务的基石,并且是进入数字领域的关键。卡利也指出了实现数字能力和商业模式由五个重点数字技术平台组合成:即信息系统、客户体验、分析和智能、物联网以及业务生态系统。

趋势10:自适应安全架构(Adaptive Security Architecture)

上面提到的智能数字网格和数字技术平台也为坏人创造了更大的攻击面,因此随着安全问题也将不断激增。卡利指出,“建立安全技术应该有自己的基准线,以此来保证物联网平台的安全。监控用户和实体行为是物联网场景中特别重要的一个补充内容。然而,对于很对从事IT安全行业的人来讲,物联网的边缘是非常脆弱的领域,将会出现很多安全漏洞,他们需要不断提供新的修补工具和流程。因此再创造物联网平台的时候,安全性是必须要考虑到的问题。”

围观 200

USB已经成为设备和PC之间通信的标准方式,从通用设备(如闪存设备和鼠标)到专用设备,该标准几乎完全替代了其他的串行通信协议。

USB外围设备彼此之间不能相互通信,它们只能与具有控制总线能力的USB主设备通信。直到最近,也只有PC具有主设备能力。但目前,许多微控制器也具有了嵌入式USB主设备的功能,这使得嵌入式应用可以连接更加广泛的USB外围设备。

USB闪存驱动器是一种使用非常广泛的USB外围设备,它已经成为传递或存储大量数据的廉价介质,许多数据记录设备正是得益于它才得以发展。对于远程的长期数据记录,可以先采集,并存储在闪存驱动器中,然后带回到方便分析处理的地方。

闪存驱动器也可以用于向PC中传输高速时间相关数据。PC是极好的数据分析工具,但实时能力有限。相反,嵌入式应用特别适合实时数据采集,但数据分析能力通常很弱。嵌入式实时数据记录仪可以在闪存驱动器上存储数据,然后把数据传输到PC上分析,这样二者的优势都得到了充分的发挥。

嵌入式USB主设备的应用

开始嵌入式设计的首要任务之一是选择微控制器。为了使用闪存驱动器,微控制器就必须具有嵌入式USB主设备的能力。如果微控制器具有USB OTG(On-The-Go)或USB双角色(Dual Role)功能,如Microchip公司的PIC24FJ256GB1微控制器,如图1所示,它也可以支持嵌入式USB主设备功能。USB外围设备,有时也称为USB设备模式,只能用作闪存驱动器等,而不能和其他USB外围设备通信。

其次,设计者应该确信能有完整的开发工具。至少也需要一个器件编程器(如果有一个调试器是最好的)和一个C语言编译器,因为嵌入式USB主设备和运行在微控制器中的程序往往是用C语言而不是用汇编语言编写的。

最后,设计者也应该了解哪些软件库是可以获得的,因为嵌入式设备发现闪存驱动器时的握手操作需要USB设备类、FAT32文件系统和其他库的支持。从头开始设计支持嵌入式USB主设备的工作会需要数月的时间,而一个由经过认证的协议栈组成的方案可以节省相当多的时间。

为了使用闪存驱动器,嵌入式设备也需要一种USB海量存储类(Mass Storage Class)设备的终端驱动程序、硬件命令行接口,以及文件系统接口。通常,具有2Gb或更低存储空间的闪存驱动器使用FAT16文件系统,而更大容量的闪存驱动器将使用FAT32文件系统。

设计要求

一旦选定了微控制器,硬件设计就开始了。USB硬件设计需要遵循以下许多规则。

● 如果嵌入式主设备需要支持USB设备类,它对外围的供电就必须能够提供500mA的电流。

● 如果嵌入式主设备需要支持任何消耗电流超过100mA的设备,它也必须能够提供500mA的电流。

● 如果嵌入式主设备需支持消耗电流100mA或更低的设备,那么VBUS电压限制就可以降低到4.4V。然而,如果嵌入式主设备需支持消耗电流超过100mA的设备,那么VBUS电压限制是 4.75V,就和全功能主设备一样。

● 必须重新设计无须用户干预就可复位的过流保护机制。

● 从USB连接器到收发器之间的传输延迟必须在8ns之内。

● 嵌入式USB主设备在VBUS上的电容必须大于120μF,而且USB OTG设备在VBUS上的电容必须为1.0?6.8μF。

除以上规则外,也必须仔细考虑采用嵌入式USB主设备应用的用户接口。USB外围设备通常用在PC上,万一发生错误就可以提供详细的错误信息。如果LED 指示灯闪烁,用户能够知道连接失败了。USB规范也作了强制性的规定,经过认证的USB嵌入式主设备必须提供错误信息。换句话说,所有错误信息必须被明确地通知应用层,也就是告知用户。

USB设备认证

USB认证主要用于保证USB设备符合USB规范的要求。认证可以在各种独立的测试机构进行。一旦产品通过认证,生产商就被允许使用USB标志,但同样需要遵守额外的许可证限制。

产品也可以不通过USB认证而直接进行生产和销售。没有USB认证,生产商可以声明自己的产品支持USB,但他不能在设备或包装上的任何地方使用USB标志。通常,取得USB嵌入式主设备认证是不太难的。

通过USB通信

实现USB嵌入式主设备的一个最大挑战就是要和各种各样的USB外围设备通信。虽然不是所有的闪存驱动器产品都通过了认证,但是如果在嵌入式设备中一种闪存驱动器可以正常使用,而另一种没有任何原因就不能使用时,用户是不会高兴的。

如果闪存驱动器需要的上电时间是允许最大时间的两倍或一半,或由于主机以最大允许的速率轮询时闪存驱动器被锁住,以及因为闪存驱动器需要一种不同的 SCSI命令序列来建立通信等,这都不会有任何问题。但如果这样的闪存驱动器在主设备上不能运行,在PC上却可以正常使用,用户会批*这一主设备。因此,确保进行广泛的测试,与多种没有进行认证的USB外围设备进行通信,即使它只是一个拇指大的闪存驱动器或一根电缆。

虽然嵌入式USB主设备可以提供USB类级的支持,在进行设计和测试时,也应该考虑对特殊USB外围设备支持的限制,通过对VID(供应商ID)和 PID(产品ID)的识别来保证产品能在设计的应用领域正常使用。这个ID列表是指USB执行者论坛所发布的目标外围设备列表(TPL),它是为了获得嵌入式主设备认证所必须服从的检查项目列表。完整的OTG认证实际上仅需要与TPL列表中的VID/PID标志的产品互操作。

围观 435

1、常用显示类型

1)数码管:0.7—1元 成本低,只能显示数字和字母

2)字符型液晶屏:LCD1602 15—25,显示数字和字母

3)点阵型黑白屏:LCD12864 50—90之间 可以显示汉字和图片

4)STN-LCD 彩屏 成本低 响应速度慢(刷新频率低),播放视频有拖尾现象

5)TFT—LCD 彩屏,主流

6)0LED 功耗低,无需背光 日本技术 今后主流

7)LED广告屏(一个一个LED组成)--成本高,耐用

2、点像素

1个点有多少种状态,多少种颜色

1bpp 1位 黑白屏 1bpp,1位每像 素

2bpp 2位 4种状态

4bpp 4位 16种状态

8bpp 8位 256种状态

16bpp 65536 假彩 16*16的一个汉字需要256个半字--512字节控制

24bpp 24位 真彩

3、彩色格式 RGB红绿蓝

1)565格式 11111 000000 11111 红绿蓝

黑色 全零0x0000

白色 0xffff

红色 111110000000000000 xf800

绿 0x07e0

蓝 0x001f

2)5551格式: 红绿蓝 后面的1表示透明色

颜色转换

16BBP RGB 5:6:5 网上24BBP较多 RGB 8:8:8 但16bBBP很少

把32BBP转换成24BBP方法:去掉8:8:8的低位变成5:6:5形式 例如:24位:01010111 01111101 01100111 ----》16位:01010 011111 01100

4、行,场信号

1)TFT显示原理与时序操作步骤:

设置寄存器

第一步:上同步

第二步:再同步

第三步:确定多少行:

a.行前同步信号

b.行前再同步信号

c.告诉这一行有多少列

d.行后同步信号

第四步:下同步信号

5、视口,虚拟屏,实际屏

1)视口:当前显示的区域(窗口)

2)实际屏:屏的实际大小(物理屏)

3)虚拟屏:被视口遮挡住的那部分看不到的屏(视口后面的部分),可以大于物理屏(把视口移到最边上,有一部分看不到)

S3C2440显示的图片最大为4M (只有22位地址)

LCDsaddr1 29:21位 图片4M内存的起始地址

LCDbaseu 20:0 位 图片在4M内存中的偏移地址

ARM为32位控制器:所有的指令和寄存器都是32位

6、做任何电子产品和学习模块一般需要三步:(以LCD显示为例)

第一步:明确目的

TFTLCD显示自己的名字(红,绿,蓝)

让名字满屏跑

将自己的图片显示

第二部:硬件设计

1)看芯片概述和介绍

2)看管脚图和管脚说明

3)看典型电路图

第三步:软件设计

程序流程(LCD为例)

a.LCD初始化:

b.配置GPIO为LCD模式

c.配置行、场信号---5个寄存器

d.配置视口、打开视频线、物理屏---3个寄存器

e.打开:打开显示,打开视频线,开电源

f.显示:将需要显示的数据送入对应的内存空间(相应的数组数据)

g.写程序(源码分析)

7、16bpp的TFT显示原理

16*16个点(即16个像素)显示一个汉字,每个点的颜色由16位二进制控制(即两字节),显示彩色
8*16个像素显示一个字符

围观 481

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。嵌入式操作系统是负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能,是一种用途广泛的系统软件。

嵌入式操作系统(Embedded Operation System,EOS)是指用于嵌入式系统的操作系统。嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。嵌入式操作系统是负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能,是一种用途广泛的系统软件。

嵌入式LINUX

嵌入式Linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。Linux做嵌入式的优势,首先,Linux是开放源代码;其次,Linux的内核小、效率高,可以定制,其系统内核最小只有约134KB;第三,Linux是免费的OS,Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台而且性能稳定,裁剪性很好,开发和使用都很容易。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,Token Ring(令牌环网)、光纤甚至卫星的支持。

移植步骤:1.Bootloader的移植;2.嵌入式Linux操作系统内核的移植;3.嵌入式Linux操作系统根文件系统的创建;4.电路板上外设Linux驱动程序的编写。

WinCE

WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Win CE的图形用户界面相当出色。WinCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200K的ROM。

一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由WinCE系统内核映像(OS Image)和板卡支持包(BSP)两部分组成。因为WinCE系统是一个软硬件紧密结合的系统,因此即使CPU处理器相同,但是如果开发板上的外围硬件不相同,这个时候还是需要修改BSP来完成一个新的BSP。因此换句话说,就是WinCE的移植过程主要是改写BSP的过程。

Android

Android 是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。Android 作为一个完全开源的操作系统,是由操作系统Linux、中间件以及核心应用程序组成的软件栈。通过 android SDK 提供的 API 以及相应的开发工具, 程序员可以很方便的开发android平台上的应用程序。其整个系统由应用程序,应用程序框架,应用程序库,Android运行库,Linux内核(Linux Kernel)五个部分组成。Android操作系统内置了一部分应用程序, 包括电子邮件客户端、SMS程序、日历、地图、浏览器、通讯录以及其他的程序,值得一提的是这些所有的程序都是用java编写的。

移植的主要的工作是驱动,硬件抽象层的移植。为了更好地理解和调试系统,也应该适当地了解上层对硬件抽象层的调用情况。

TinyOS

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400 Bytes左右,能够突破传感器存储资源少的限制。TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(A Wiring Specification)将各种组件连接起来,以完成它所需要的功能。

嵌入式实时操作系统(RTOS)

在工业控制、 军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。

FreeRTOS

FreeRTOS是一个迷你操作系统内核的小型嵌入式系统。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS任务可选择是否共享堆栈,并且没有任务数限制,多个任务可以分配相同的优先权。相同优先级任务的轮转调度,同时可设成可剥夺内核或不可剥夺内核。

FreeRTOS 的移植主要需要改写如下三个文件。1.portmacro.h 2.port.c 3. port.asm

μTenux

μTenux基于ARM微控制器平台,对uT最适用于ARM Cortex M0-M4系列的微控制器,代码开源、免费,是一个功能强大的抢占式实时多任务操作系统。μTenux除具有实时嵌入式操作系统的一般特性:可移植性,可固化,可裁剪等特性以外,它还具有如下优点:(1)微内核。无MMU, ROM/RAM占用量小,所占ROM最大60KB,最小10KB;RAM最大12KB,最小2KB;(2)开源免费;(3)支持所有32位ARM7/9和Cortex M系列的微控制器;(4)可配置多达到256个任务以及140个任务优先级;(5)有良好的商业支持, T-Engine论坛进行总的维护。

移植主要包括:芯片系统时钟移植,外设移植和通用输出/输入端口的移植以及看门狗模块移植。由于考虑到内核代码的重要性以及其在整个移植中的重要意义,且为了整个系统有更好的实时性,可选用汇编语言编写操作系统的启动代码。

VxWorks

VxWorks系统提供多处理器间和任务间高效的信号灯、消息队列、管道、网络透明的套接字。实时系统的另一关键特性是硬件中断处理。为了获得最快速可靠的中断响应,VxWorks系统的中断服务程序ISR有自己的上下文。VxWorks实时操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。

移植过程可以参考网络上一些BSP代码,BSP的英文全称为board support package,即板级支持包,它的作用是针对特殊的硬件平台,为VxWorks内核提供操作的接口。

μClinux

嵌入式Linux作为一个开放源代码的操作系统,以价格低廉、功能强大又易移植的特性正在被广泛应用,μClinux是专门针对没有MMU的处理器而设计的嵌入式Linux,非常适合中低端嵌入式系统的需求。 在GNU通用公共许可证的授权下,μClinux操作系统的用户可以使用几乎所有Linux的API函数,不会因为没有内存管理单元MMU而受到影响;而且,μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,体积小了,但是仍然保留了Linux的大多数的优点,比如稳定性好、强大的网络功能、良好的可移植性、完备的文件系统支持功能、以及标准丰富的应用程序接口API等,可以支持类似ARM7TDMI等类型多的小巧玲珑的中央处理器。

eCos

eCos中文翻译为嵌入式可配置操作系统或嵌入式可配置实时操作系统。适合于深度嵌入式应用,主要应用对象包括消费电子、电信、车载设备、手持设备以及其他一些低成本和便携式应用。eCos是一种开发源代码软件,无任何版权费用。 eCos最大的特点是模块化,内核可配置。如果说嵌入式Linux太庞大了,那么eCos可能就能够满足要求。它是一个针对16位、32位和64位处理器的可移植开放源代码的嵌入式RTOS。和嵌入式Linux不同,它是由专门设计嵌入式系统的工作组设计的。eCos具有相当丰富的特性和一个配置工具,后者能够让你选取你所需要的特性。

eCos的软件分了若干的模块,移植工作主要在他的hal层进行,所谓hal(硬件抽象层)就是把和硬件相关的软件凑到一起。

μC/OS-II

μC/OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。其结构小巧简洁且支持抢占式的多任务调度与管理。此实时操作系统管理任务数多达64个,且提供内部程序存储器管理、系统运行时间管理、多任务实时调度与管理等功能。由于它的作者占用和保留了8个任务,所以留给用户应用程序最多可有56个任务。赋予各个任务的优先级必须是不相同的。这意味着μC/OS-II不支持时间片轮转调度法。μC/OS-II为每个任务设置独立的堆栈空间,可以快速实现任务切换。

将μC/OS-II操作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。硬件方面,目标处理器需满足以下条件:

①处理器的C编译器能产生可重入代码;

②用C语言可以开/关中断;

③处理器支持中断,并且能够产生定时中断(通常在10~1000 Hz之间);

④处理器能够支持容纳一定量数据的硬件堆栈;

⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。

软件方面,主要是一些与处理器相关的代码移植,其分布在OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM这3个不同的文件中。

来源:网络(版权归原作者所有)

围观 522

1、IIC---SDA、SCL

IIC协议 发明者 Philips公司 通过IIC芯片收取版权税

近距离通信

标准模式 100KBIT/s

快速模式 400K 常用 S3C2440使用

高速模式 3.4M

上拉电阻 10K 如果速度越快,上拉电阻越小,增加驱动能力

2、IIC读写过程

IIC读过程:

1)开始

2)写芯片地址

3)写芯片内部地址

4)将写变成读

5)读数据

6)结束

IIC写过程

1)开始

2)写芯片地址

3)写芯片内部地址

4)写数据

5)结束

AT24c02芯片 它的芯片地址为 1010 a2,a1,a0,R/w a2,a1,a0硬件接地
0xa0
1010 1110 = 0xae

AT24C02的操作模式:

对AT24C02的写模式:

1)字节写模式:可进行随机写操作,每次写一字节,且每次都要发送从机地址和从机内部地址,写完一字节数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号

2)页写 模式:每次写一页,每页8个字节,每写一页都要写从机地址和从机内部地址(必须为8的倍数),

如果写超过8个字节,会在页内进行循环写(即循环到当前页的第一字节开始写),覆盖之前写的数据。写完一页数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号

对AT24C02的读模式:

1)随机读模式:可进行随机读操作,每次读一字节,且每次都要发送从机地址和从机内部地址,读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号

2)当前地址读模式:读一个字节,需要发送从机地址,不用发送从机内部地址,而是继续接着当前最后操作的从机内部地址进行读(在没有断电的情况下),读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号

3)顺序读模式:发送从机地址和随机内部地址(也可以是当前从机内部地址),进行顺序读操作,当收到MCU的Stop信号后才停止读。

如果读取的数据长度超过范围,会循环到整个Memory的第一页的第一个字节进行读(注意:在写数据时超过范围只是会循环到当前页的第一字节)。

来源:网络(版权归原著作者所有)

围观 230

页面

订阅 RSS - 嵌入式