听说,在我国,当老板的一般都有这么一个心态:花最少的钱,办最多的事!
客户大爷不能怠慢,由于开源和节约不可偏废。政府机关有必要打点,究竟“有关部门”掌握着生杀大权。所以,这“节约之道”便落在了职工的头顶上。
仅仅,人心惟危,道心惟微,被教育多年的打工者都不想做活雷锋。节约手法过于显着的话,无异于饮鸠止渴。所以,老板们八仙过海,各显神通。
有的呢,深化履行我党的大众路线,和大众们浑然一体,很好地完成了“到大众中去,让公民服务”的意图。
有的呢,摆出一副义薄云天的姿态,和职工们勾肩搭背、称兄道弟,以“情”感人,成功地将宽厚宽厚的职工们加薪的恳求摧残在了萌发状况。
有的呢,善用权谋,假惺惺地放权,让手下人发生“主人翁”认识,一起搞制衡之道,仿效春秋二桃杀三士的故事,让职工们争相效忠,总归,靠着厚黑之道,将风筝背面的那根线牢牢地掌控在自己手中。
也许是深知惹毛工程师的沉痛下场,电子类公司的老板对待工程师们更有人道一些。在画大饼、吊胡萝卜一段时刻后也会忍着心痛犒赏犒赏我们伙。可是,开公司究竟不是请客吃饭,还得有钱赚。
所以,不能拿人开刀的老板们就把目光放到了物料上面。
假如一件产品的物料成天性节约10块,卖出去1万件便是10万,10万件便是100万。数学运算算得贼溜的老板们就这样对物料清单下手了。
一
在小公司里边,老板们亲身参加硬件规划不算什么稀罕事。老板常常赤膊上阵,对硬件元器件选型评头论足。
作为一名软件工程师,好整以暇地在旁边赏识硬件工程师被老板虐得敢怒不敢言的画风当然很惬意,可是一旦老板的魔爪伸向MCU这颗要害物料之时,我辈也难以事不关己高高挂起了。
那一日,晴空万里,艳阳高照,不才正沐浴在午后的阳光中,品着茶香,感叹着年月静好:“其香悠远兮扶摇登宵,其味空静兮潜藏于窍!”
不才摇着头,晃着脑,感觉到愉快的自我就快要出窍,全然没有发现悄然来到面前的领导。
“咳咳”,一声短暂的咳嗽,带着了解的压迫感将我从浮生若梦中吵醒。不才赶忙从半躺的姿态中坐起,差点闪着媳妇所言“用进废退”的老腰。
“马步君,看看我手里这个板子。”领导带着看似神秘莫测、其实没有什么含义的浅笑,把一个电路板递给了我。
不消说,来使命了!从天堂坠落人世的我心中一个咯噔,看着手里的电路板,心里泛动个不断:“这板子看着不算杂乱,这等小活一般是不会组织给我的,难道领导开恩?”
这边厢,不才心中火光电闪,转个不断,那儿厢,领导打开了话匣子,讲起了原委。
原本,这是其他公司给我司一个客户批量供货的产品,现在客户要求对产品进行晋级,期望在硬件电路根本不改动的情况下,添加一些功用,客户为了确保供货安全,把我司列入了备胎供货商之列。
详细情况告知完之后,领导把不知从哪里搞来的原产品电路图发给了我,让我评价一下不改电路、彻底抄板的情况下,能不能完成产品晋级。
二
“我真傻,真的,”过后,我常常抬起英俊逼人的眼睛来,祥林嫂似对搭档说。“我单知道在规划新产品的时分为了操控本钱,领导会干预MCU的选型;我不知道晋级他人产品的时分也会这样。”
当我把“不需求改电路,只需求换一下引脚兼容、资源更丰厚一点的MCU”的定论告知领导时,领导及时地阻止了我的“无理要求”。
“客户是把产品晋级了,可是产品的价格根本未动,加的功用也不算太多,MCU就不要换了吧。想想方法,能省一块是一块嘛!”
看着领导那副欠揍的笑脸,我力排众议,“天之道,损有余而补缺乏……”
“别吊书袋子了,硬件资源不行,软件功底来凑。所以才把这么艰巨的使命交给你嘛!”
得,认命吧!
资源受限,编程天然处处是应战。详细到这个产品上,我发现应战最大的一点便是:守时运用特别多,MCU的守时器又特别地少。
硬件守时器的数量远远少于守时运用的数量,明显无法为每一个守时运用独自分配一个硬件守时器。原本一个萝卜一个坑最好办,现在资源不行怎么办?
不才就不卖关子了,计划当然是用软件的有余补偿硬件的缺乏了。
为了各个守时运用的起点相同、步调一致,一起为了编程的一致,最好的方法便是在单个硬件守时器的基础上模仿完成多个软件守时器,以前台硬件守时器中止服务程序和后台软件守时器办理程序相结合,完成单次守时、屡次守时和循环守时运用。
三
不才不屑藏私,下面就把详细的计划规划给各位看官们共享出来。
先跟我们树立这么一个概念:
程序规划=数据结构+运算
详细到这儿,数据结构便是“软件守时器”,运算便是中止服务程序(ISR)和守时办理程序。
软件守时器是“结构体”方式,依据守时运用的特色及分类,规划一种包括单次守时、屡次守时和循环守时三种类型守时的软件守时器节点的数据结构,运用一个静态分配的软件守时器节点数组来界说一切的守时使命。
这个结构体有以下几个成员变量:软件守时器ID、激活状况、守时次数、超时次数, 循环标识,守时值, 计时值, 回调函数,这些成员变量的含义大多数能够“望文生义”,这儿便不赘述了。
下面开端叨ISR和守时办理程序。
ISR和守时办理程序是靠一个叫“相对计时时刻”(记为Timer_ticked)的信使扭结在一起的,它表明未被软件守时器计时的时刻。
MCU上电初始化时,设置硬件守时器的中止周期为T并使能中止,硬件守时器以T为时刻距离,触发MCU履行ISR。在ISR中,累加相对计时时刻的数值,累加值为T,即Timer_ticked += T。
守时器办理程序完成对软件守时器节点数组的操作后,清零相对计时时刻,所以,只需程序规划地合理,Timer_ticked不会很大,超越20ms根本能够确认您的程序规划有毛病了。
总归,经过相对计时时刻,确保了一切软件守时器节点的同步计时和精确计时。
ISR当然简略,接下来便是略微杂乱一些的守时办理程序了。
守时办理程序是办理一切守时运用的,每个守时运用对应上述结构体数组里的一个成员,能够以“节点”来称号它。
守时办理程序是在后台循环履行的,它每次都会查看一切守时器节点的状况,假如该守时器节点处于闲暇状况,它就越过它不做处理,假如处于激活状况,它就添加该守时器节点的计时值(累加值为Timer_ticked)。
然后判别计时值是否超越了所设定的守时值。假如没超越,那就越过它不做处理,假如超越了,先调用它的守时回调函数,然后判别该节点是否为循环守时器。
假如不是循环守时,越过它不做处理,假如是,则需求重启本守时器节点。
依照这种方法处理完一切守时器节点之后,便能够退出本次守时办理程序了。
讲到这儿,各位看官应该看理解了吧.
四
小米手机物美价廉,没来由地担上了“贱价误国”的臭名。国外的MCU厂商却是鸡贼得很,一分钱一分货,资源丰厚一点,价格就涨上去了,赤果果的资本家嘴脸。
所以,在本钱的束缚以及领导的威严下,在一个资源受限的MCU上捣鼓代码成了嵌入式软件工程师日常作业的常态。不过,不要诉苦,也不必担忧和焦心,方法总比困难多。
总的准则便是:硬件不行,软件来凑。
比方关于多个守时运用,单守时器就满足!