面向硬件编程的一些思考

Posted 王啸tr1912

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向硬件编程的一些思考相关的知识,希望对你有一定的参考价值。

       最近小编这几天弄了弄硬件的编程,感觉很有趣,同时跟纯软件编程肯定是有很多区别的,所以在此和大家说道说道。


一、硬件编程


        其实说道硬件编程,大家肯定乍一听感觉很难,很高大上,但是我想说的是除了需要了解一些硬件编程中对于各种机器工作状态的理解之外,剩下的就真没有什么了,基本都是逻辑and逻辑and实际,说白了就是看文档,理清楚逻辑再加上一些根据实际状况的调试就可以很轻松的能够搞定硬件编程。

        硬件编程是什么呢?其实我们用到的电脑里面的驱动就是面向硬件的编程,只不过驱动程序是真正硬件里面程序的一种辅助程序。硬件编程就是对可以进行逻辑操控的硬件进行编程,让他做你想要做的事情,这里说道可编程硬件 ,基本上都是针对的一类有存储功能的,逻辑可变的一系列芯片的一个总称,常见的有51单片机,Arduino,arm处理器(一般手机上面用的)等等。一般常见的基础电子元件是不可以被编程的,如电阻,LED,电子管等

        如果你可以用你写的程序来操作这些类似CPU的处理器,那么恭喜你,你已经迈入了硬件工程师领域的大门了。说到硬件编程,为了操作简单,和硬件接触方便,通常用的语言都是C,C++,汇编等基础语言,在一般程序员上手上来说的话是完全没有问题的,尤其是到了arduino时代,用C编程arduino的程序简直不要这么简单。


二、硬件选择


        

        一般来讲的话,如果真心想要学习硬件编程的人都会从51系列的单片机入手,包括STC89C52,STC12S5C60S等等,如果想要进一步进阶的话,要接触到STM32系列的单片机了,他同样比较简单,但是性能和效率上要比基础的51单片机好很多,然后下一步肯定就是面向ARM的编程了,想要做ARM的编程,首先需要了解一些关于Linux的知识,因为一般用ARM的单片机光有程序已经是不够的了,还必须要有硬件系统才可以很好的管理,也为编程者省去了很多事情,还有Linux的内核对于基础硬件的操作也很好,Linux的代码也是用C语言写的,所以他们臭味相投。

        如果你只是想要了解一下硬件编程,想做为一个个人兴趣爱好的话,可以从arduino来入手,因为他基本不需要你懂单片机中的什么寄存器了,中断了就可以让你实现很多功能,所以比较容易做出东西,可以让初学者有一个很简单的认识,并且arduino的功能也是非常强大,它自己集成了很多的硬件处理库,方便操作不同的硬件电路,它还可以直接用对象的角度来考虑整个硬件的世界,比较适合某些自身程序员。



三、编程


        其实说道编程,感觉天下的程序是一家,不管是纯软件编程还是硬件中的软件编程也好,核心的语句总是那么几个,核心的流程也总是那么几个,并且考虑的东西都是一样的,怎样可以获得正确的数据,怎样去处理。

        然而不同的地方在于可能纯软件编程中需要的数据要不就是从界面(interface)上人输入的,要不就是获得已有的,要不就是从某个函数方法中获得的。但是硬件编程需要从硬件中读取数据,数据有的时候不是很直接,类似于信号一类的东西,比如有的硬件(传感器)反馈回来的是一组电平数,或者是一段PWM波形,你就需要去按照说明文档对其进行合理的分析,然后才能得到你想要的结果,然后需要考虑如何显示,像是在屏幕上哪个像素点亮,哪个像素点灭等一系列细小的东西。

        然后再硬件编程中绝大部分都是单线程的编程所以需要考虑时序的问题,可能稍微逻辑不好就会导致整个数据的读取错误,并且单片机在操作其他硬件的时候是需要对硬件进行加电初始化的,还有进行加点激励才会读取数据的,对于这些情况也需要注意,这个时候理解一些计算机或者硬件工作原理就显得格外重要了。


四、总结


        其实我感觉每个程序员都应该去经历一些硬件编程的考验,从我们经历的各种学习来看包括网络原理,操作系统,软考基础等的训练,我再来看硬件程序的编写和硬件说明书,就会突然发现有很多熟悉的身影,因为他们就是真真正正的用在这些硬件上面的理论,所以我们写程序的时候也不能光考虑最后的实现,还要考虑实际中电路或者硬件的工作方法,这个时候我们写出来的程序肯定会更加的高效、更加的有依据。

以上是关于面向硬件编程的一些思考的主要内容,如果未能解决你的问题,请参考以下文章

Go语言与面向对象编程

面试题思考:解释一下什么叫AOP(面向切面编程)

面向对象的一些重要的基本概念

一些关于面向对象的思考

PLC编程再思考之4 - 面向对象

有关编程和工作的一些思考