demi的博客

ARM数据定义伪汇编

demi的头像

数据定义伪汇编:DCB用于分配以前连续的字节存储单元并用指定的数据初始化。DCB也可以用“=”来代替。举个例子,如果要在某一片连续的空间里,我给它赋上01,02,03,设上这些初值,这就相当于之前我们定义的一些变量开辟空间的感觉。我们有时候定义一些结构结构体的时候,也要用到这样的空间开辟。

数据定义伪汇编:DCB:用于分配一片连续的字节存储单元并用指定的数据初始化。使用格式:name DCB value。

操作 比方说同样在这个地方做一个分配:dcContro DCB,下面给它分配一片连续的空间,分别给它赋上值,后面跟上的数据类型也是那三种数据类型(字符串,逻辑值,数据值。),下面跟一个数值,比如说,dcContro DCB 0x01,0x02,0x03这样三个值,用逗号隔开。意思就是随机在一个地方分配一段连续的内存空间分别给它填上这三个值,每个空间的间隔是按照字节为单位,正好我们填的是字节为单位这样的一个值。现在编译一下,这里又遇到问题了,这里又不认操作码了,

十年经验教你如何学习嵌入式

demi的头像

一、嵌入式系统的概念

着重理解“嵌入”的概念

主要从三个方面上来理解。

1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。

比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址, 可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。

IXP系列最高主频可以达到 1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由 intel进行整合后成Xscale内核的最高的处理器了。

UPS电源蓄电池六种充电方式介绍

demi的头像

在早期的UPS电源中,大都采用恒压给蓄电池充电,但是由于在蓄电池放电之后,端电压较低,如采用恒压充电,在充电初期,造成充电电流较大,可能超过蓄电池所能承受的范围,损坏蓄电池。而蓄电池是UPS电源中相对比较薄弱的环节,据统计,在UPS电源故障中有30%都是和蓄电池有关系的。

蓄电池在UPS电源的成本当中所占的比重又较大,一般标准配置的UPS电源(10分钟左右的备用供电)中蓄电池所占成本的比例为20%-25%,如果再延长备用时间,蓄电池的成本将急剧增加,甚至超过整个主机所占的比重。所以针对蓄电池的充放电控制应根据蓄电池本身的物理化学特性合理控制充放电,以最大的限度的保持蓄电池,延长其使用寿命。对于蓄电池的放电,人们几乎无法控制其放电速率,因为在市电停电时人们无法预测用户所带的负载,人们所能做的只能控制蓄电池的放电电压,及时地提醒用户关机切除负载,防止蓄电池的过度放电。所以对蓄电池充电控制的研究就显得非常有意义,制定合理的充电控制策略可以有效延长蓄电池的使用寿命,提高UPS电源的循环周期。

UPS恒压充电在充电后期,充电电流逐渐的减小,与其它充电方式相比,更接近于最佳充电曲线。除了恒压充电方式外,还有很多其它比较常用的充电方式。

UPS恒流充电

短路保护两种方式如何选取,你知道吗?

demi的头像

现今随着电子技术的飞速发展以及软件技术的强大,针对电气线路和电器设备的保护功能也是得到了极大的完善和革新。譬如电气线路当中三大保护功能之一的短路保护,早已告别了保险丝熔断器的时代,取而代之的是监测灵敏度高、动作迅速可靠的各种智能保护器。

在这些智能保护器当中,大多数产品针对短路提供两种方式的保护选项供用户选择。那么我们该如何选择这两种保护方式哪?今天本人就为大家略做一下讲解,以便大家根据实际情况正确选型:

1、鉴幅方式短路保护

这种短路保护方式,通过字面就可以直观的理解——当被保护的对象中实际电流值超过所设置的目标值后,保护器就认为线路发生了短路故障,随即(有部分保护器还可以设定动作时间)动作切断电源。 该种短路保护方式由于只针对线路电流量检测,因此它适合供电线路距离不长,负载类型较为单一且波动不大的环境下,例如民用变配线路等。

2、相敏方式短路保护

如果我们面对的电气线路供电距离较长,而且当中用电负荷类型繁多并含有频繁启停的负载,那么再采用鉴幅方式的短路保护恐怕就容易发生保护器误动作的情况,影响正常供电质量。这种情况下我们就要选择专门针对上述情况设计的相敏方式短路保护。

提高电感线圈Q值的七个小技巧!

demi的头像

首先来讲讲电感品质因数Q的定义

Q值是衡量电感器件的主要参数。是指电感器在某一频率的交流电压下工作时,所呈现的感抗与其等效损耗电阻之比。电感器的Q值越高,其损耗越小,效率越高。

品质因数Q是反映线圈质量的重要参数,提高线圈的Q值,可以说是绕制线圈要注意的重点之一。

那么,如何提高绕制线圈的Q值呢,下面介绍具体的方法:

1、根据工作频率,选用线圈的导线

工作于低频段的电感线圈,一般采用漆包线等带绝缘的导线绕制。工作频率高于几万赫,而低于2MHz的电路中,采用多股绝缘的导线绕制线圈,这样,可有效地增加导体的表面积,从而可以克服集肤效应的影响,使Q值比相同截面积的单根导线绕制的线圈高30%-50%。在频率高于2MHz的电路中,电感线圈应采用单根粗导线绕制,导线的直径一般为0.3mm-1.5mm。采用间绕的电感线圈,常用镀银铜线绕制,以增加导线表面的导电性。这时不宜选用多股导线绕制,因为多股绝缘线在频率很高时,线圈绝缘介质将引起额外的损耗,其效果反不如单根导线好。

2、选用优质的线圈骨架,减少介质损耗

在频率较高的场合,如短波波段,因为普通的线圈骨架,其介质损耗显著增加,因此,应选用高频介质材料,如高频瓷、聚四氟乙烯、聚苯乙烯等作为骨架,并采用间绕法绕制。

不厌其烦的四大集成电路

demi的头像

ASIC--专用集成电路

ASIC原本就是专门为某一项功能开发的专用集成芯片,比如摄像头里面的芯片,小小的一片,集成度很低,成本很低,可是够用了。一个低端摄像头价格很 便宜,买一片ARM费用就不可同日而语了。后来ASIC发展了一些,称为半定制专用集成电路,相对来说更接近FPGA,甚至在某些地方,ASIC就是个大概念,FPGA属于ASIC之下的一部分。

FPGA--现场可编程门阵列

ucosii的系统时钟来源

demi的头像

在ucosii中,系统时钟如同一个人的心跳,它为整个系统提供一个运行基时,对任务调度至关重要。

ucosii的系统时钟一般是由MCU内部定时器产生(可靠性高),也可以使用协处理器或者外部时钟提供(可靠性低)。使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。

下面对使用MCU内部定时器方式产生系统时钟方式做个解析。

在main()函数中,我们会建立一个AppTaskStart()任务,此任务中,我们会初始化硬件BSP_Init()。其中,最重要的一点就是初始化时钟BSP_Tick_Init(),实际上就是分配一个MCU的定时器给ucosii使用。定时器必须打开中断,因为定时器中断服务程序中,我们必须要调用OS_CORE.c中的系统时钟节拍函数OSTimeTick()。看到这里,我们终于找到系统时钟和MCU的定时器之间的关系了。

既然系统时钟是如此的重要,它的主要工作是做什么,又是怎样服务于ucosii系统的呢?

单片机C语言基础编程源码六则

demi的头像

1.某单片机系统的P2口接一数模转换器DAC0832输出模拟量,现在要求从DAC0832输出连续的三角波,实现的方法是从P2口连续输出按照三角波变化的数值,从0开始逐渐增大,到某一最大值后逐渐减小,直到0,然后再从0逐渐增大,一直这样输出。试编写一函数,使从P2口输出的值产生三角波,并且使三角波的周期和最大值通过入口参数能够改变。

  #include #define DAC0832 XBYTE[0x7FFF] void san(unsigned char max1,unsigned char zhou1)

  { unsigned char i,j,max,zhou;max=max1;zhou=zhou1;while(1)

  { for(i=0;i0,i——)

  { DAC0832=i;for(j=0;j1,j——)

  { for(i=0;i*(ptr+i+1))

  { temp=*(ptr+i+1);*(ptr+i+1)=*(ptr+i);*(ptr+i)=temp;} *ptr1=*(ptr+20/2);}

对单片机C语言的一些误用和总结

demi的头像

在学习单片机的时候才真正知道C语言是什么它是来干什么的~但是C语言用到嵌入式只是它小小的一部分他的应用还有很多地方呢,呵呵我们这里就不讨论这个了。我们是不是在写程序的时候错误很多就算编译通过了也达不到我们预期的结果,完了自己是不是也很难找到错在哪儿吧?我绝得语言之所以能称之为语言,它肯定是一种工具一种相互交流相互通信相互传达之间的意图的工具,作为语言那肯定得有自己的语法,要想相互交流肯定得先学好它的语法吧(比如像表达式,函数,循环,指针)我称之为C语言的语法。C语言虽然很强大但是他也有不少陷阱,所以我发这篇博客有两个目的一是:把C语言一些误用易错的地方总结一下,二是把C语言一些基本语法总结一下~

第一次:

1.关于自增自减(即++i,i++)

单片机编程思想之消除阻塞

demi的头像

本人写单片机程序也有五六年了,其实在三年前我写的程序里几乎没有delay()了,如果你的程序没有delay那么整个程序执行起来会非常的快。下面我们来分析下平时写单片机程序中所遇到的阻塞,以及解决思路。

在讲之前我们的程序框架是main函数里先初始化,然后while(1),前台程序是各种中断。

阻塞有:

①按键程序判断会用到delay消抖,典型的消抖是5ms。

②动态显示时候显示一位数码管时候也会用到延时5ms左右。

③等待串口发送完成。

④好像就这些比较耗时的了。

解决方法:

①像这样的程序,我们可以在定时中断里面判断按键的状态

②解决方法同上

③串口中断发送估计很多人没有用过,也有很多人觉得没有必要,我想说的是你没有写过大型项目,对实时性要求不高,如果你的程序很大,需要服务的地方很多,那你用阻塞式发送很可能会降低整个程序的实时性了,例如9600波特率发送一个字符1ms时间,如果一次发送50个字符就是相当于执行delay(50);那怎么用中断发送呢?很简单,打开串口\发送中断,第一个字符你程序发送,剩余的在发送中断里面发送即可。

页面

订阅 RSS - demi的博客