您的位置 首页 元件

一根信号线,代码版原本相见

嵌入式系统是硬件搭台、软件唱戏,就像你可以在同一个舞台上演出不同的剧目一样,嵌入式设备的硬件做好后,只要硬件上支持,你可以根据不同的功能要求烧写不同的代码。

楔子

嵌入式体系是硬件搭台、软件唱戏,就像你能够在同一个舞台上表演不同的剧目相同,嵌入式设备的硬件做好后,只需硬件上支撑,你能够依据不同的功用要求烧写不同的代码。

在嵌入式软件的开发阶段,需求经过屡次更新迭代,软件版别能够以“里程碑”的方法,经过版别标号(x.y)对各个软件版别进行标识和区别。并且,一般情况下,不同的软件版别中可能会躲藏不同表现方法的缺点,为了进步软件的可靠性和完善功能,需求查找缺点或许定位缺点的引进时刻,这个时分就需求对不同版别的软件进行并行测验,以定位缺点的原因和详细位置。

比较而言,硬件版别相对固定,分不出大哥和二哥,然后无法经过辨认硬件电路特征判别当时被测验的软件的版别,然后无法进一步剖析。假如软件自身包括版别信息,经过一种手法从软件中取得版别信息,便能够处理上述问题。

明显,这里有一个不言自明的需求:获取当时的代码版别信息。关于存在多个代码版别的嵌入式硬件而言,这是一个“刚需”。

1

曾几何时,读取软件版别仅仅中高端嵌入式设备的专利,职责越大,才能越大,中高端如它,总有读取软件版别信息并出现出来的办法。

低端设备忝列轻视链的结尾,它要么只需一种软件完成的版别,然后底子不存在获取代码版别信息的需求,要么虽然有几个版别,可是“有心杀贼,无力回天”,只能把代码版别信息躲藏在低微的尘土里。

可是,在许多情况下,低端设备也有获取代码版别信息的诉求。

洒家需求做一款信号转换器,其间,要把电机转速信息(单位是rpm,转/分钟)转换成车速信息(单位为km/h),依据公式,车速信息由变速箱的减速比、车轮直径和电机转速核算得来。

这个信号转换器十分之简略,没有任何通讯端口,故而无法经过通讯的方法、以装备的手法将不同的减速比和车轮直径下载到信号转换器中,让信号转换器依据不同的装备核算车速。

为了完成信号转换器的通用性,让它能够习惯不同的速比和轮径,洒家采纳的笨办法是在同一个硬件上规划几种不同的软件版别,别离对应不同的减速比和车轮直径,这样一来,在相应的代码中求同存异,就能够复用硬件资源并进步产品的开发功率。

这种思路固然是好,可是问题是,在日常的出产、库存办理中,怎样从一群现已烧录了代码又长得一模相同的信号转换器中,辨认出它究竟支撑哪种速比和轮径呢?

所以,获取代码版别信息以就变得十分必要并且火急了。

2

可是,没有任何通讯端口,没有任何显现界面,还想要获取代码版别信息,其可得乎?所以,洒家向周边的同仁咨询定见。

左面的张工讥我痴人说梦,右边的李工说我想入非非,前边的徐工笑我胡思乱想,后边的赵工却神秘兮兮地竖起一根手指,在我眼前晃来晃去,口中念念有词:波罗波罗蜜,醒起!

哗啦啦四周泼下几盆凉水来,眨眼间浇了我一个透心凉。在这闹闹哄哄的冷言冷语中,洒家倒横下一条心来:国际千奇百怪,众生千差万别,可是佛曰,众生相等。代码版别就像是人类的身份信息,怎样就答不得他人的一句-“尊兄大名?”

获取代码版别的根本操作便是“你来问,我来答”,需求和外部国际进行交互。提到交互,天然需求凭借信号转换器当时的接口。接口接口,望文生义,设备内部衔接外部的端口。

如前所述,这个信号转换器是一个很简略的产品,衔接器上的端口都是一些一般的模仿输入输出端口、数字输入输出口、脉冲输入和PWM输出端口。

看官们或许现已模模糊糊地想到了,能够从未运用的端子上下手,一个输进去,便是“你来问”,一个输出来,便是“我来答”。按键方法输入,LED方法输出,操作起来便利,显现方法也直观。

洒家一开始也是这么想的,并且想得更为详尽。

能够在信号转换器的外接线缆上用夹线针把其间两根线的信号取出来,另一边一个接按键,一个接LED。一起,当然要在信号转换器的硬件上增加两处电路,一处完成按键收集,一个完成LED输出驱动,这些电路都很简略,自不待言。

想好处理计划后,洒家动身环顾,把张李诸工叫过来,鼓着腮帮子、喷着唾沫星子和他们讲起了我的计划。当当时也,洒家忽然心下一凛,想起了一个要害的问题:端口够用否?

我赶忙数了数信号转换器衔接器上还未曾运用过的端子,倒运催的,没有用过的端口竟然只剩下一路了!待我把目光投向MCU的IO上时,愈加心惊地发现,除了用过的IO口和仿真编程口,可用的IO口也只需一个了!

3

一支穿云箭,千军万马来相见。斧头帮的混混能够把牛皮吹破了天,可我现在只能对着板子大眼瞪着小眼。

说出去的话,泼出去的水。鬼话现已出口,再难回收,怎样办?

只剩一根线,既要输入,又得输出,既可检测出按键状况,还要输出得了LED的驱动,除了复用别无他途。并且,除了接口端子上要完成复用之外,MCU的IO那里也有必要一脚两用。

大约而言,MCU IO长时刻处于输入状况,检测到按键按下后便切换为输出方法,经过LED依照必定的规则显现完代码版别信息之后,便再次切换回输入状况。

详细怎样完成就颇有些烧脑了。洒家调整好呼吸,正襟危坐,如入禅定,一点一滴地思索着。

MCU的IO分时切换输入和输出方向,初始方向设置为输入。周期性地读取IO状况,检测按键的按下和弹起状况。

检测到有用的按键按下时,等候按键弹起引发的IO状况切换。当弹起时将IO口的方向设置为输出,然后以脉冲的方法驱动LED。

为了区别版别号中的大版别(又称“基线版别”)和小版别(又称“更新版别”),需求以不同的频率输出相应数量的方波脉冲,以便利观察者判别大版别和小版别号。

比方,当版别号为2.4时,基线版别/大版别号为2,更新版别/小版别号为4。能够让LED以频率为2Hz、占空比为50%的PWM方法输出2个周期方波,间歇2秒后,再以频率为1Hz、占空比为50%的PWM方法输出4个周期的方波脉冲。

更一般的,版别号是a.b时,LED的闪耀方法为a个2Hz频率方波+间歇2秒+b个1Hz频率方波。

当LED的显现完成后,需求再次将IO脚设置为输入方向,以等候下一次按键方法的问询。经过在按键按下并弹起后计算2s间歇时刻前后的LED闪耀次数,便能够得到基线版别和更新版别号。

4

信任经过上面的描绘,各位看官现已大致了解了怎样用一个IO口一个外接端子获取代码版别信息。可是,从硬件上怎样完成还有些摸不着头脑。

帮人帮究竟,送佛送到西,洒家也不藏私,把电路图贴上来。

平常,IO口处于输入状况,按键处于弹起状况,IO口处电平为低,LED处于平息状况。当按下按键,R1上处短接VCC,IO口处电压为高,而LED被反向截止,故而持续处于平息状况。对LED而言,只需IO口是输入方向,不管按键按下仍是弹起都是平息状况。

当将IO设置为输出方向时,在按键处于弹起状况的条件下,IO电平为高时,LED导通点亮,IO电平为低时,LED截止平息。

如此一来,经过在单个IO管脚上完成按键检测与LED驱动的复用,以最少的资源完成了便完成了软件版别的获取,该计划在资源极端受限的低端嵌入式设备范畴上必定具有广泛的适用性。

跋文

我和搭档们通报了这种计划后,诸工仍然模棱两可,但洒家却按捺不住地志足意满。这种方法简略高效,易于完成,正所谓:一根信号线,代码版别来相见。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/114498.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部