从大二开学到现在,通过老师的几次指导和自己的学习,已经打好了不错的基础;可是还是对老师一开始对我们说的要从上层着手而不是一开始就从底层开始搞不是很清楚,虽然感觉道理上是这样的,之前从底层开始搞确实吃了不少亏;不过也没有尝到从上层开始的甜头。所以之前一直在雨里雾里学,昨天把驱动器和USBcan跑通后,老师说:“下一步用程序控制电机,用USBCAN监控” 我一想,怎么用Linux编程啊,我还根本不会,只是听老师说很easy也很方便。于是联系了师兄,今天吃完中饭就跑到机械大楼了。在学长的指点下通过自己的尝试终于搞明白了。于是想写写博客记录下来,而且方便还不会的同学。
以前我们学的51,用的C语言编程然后用 keil生成hex文件烧写进板子,就可以运行。现在用Linux,我们之前已经会了vi编辑器,也会用gcc交叉编译把.c编译成板子能够运行的程序,也会了用NFS把Linux里的文件挂载到板子里面。也就相当于我们有了keil软件,有了烧写软件,差的就是如何根据我们的需求编程了。51里面就是通过给各个引脚发高低电频,控制锁存器,写中断函数等等。而在Linux里面,很多功能都已经写成一个文件了,你只需要调用那个文件就可以实现功能:先用open函数把文件的文件描述符(fd)得到。 “文件描述符的作用,类似在生活中排队取的号牌,业务员(进程)通过叫号(引用文件描述符)就能找到办事的人(打开的文件)。”(嵌入式开发教程上册.PDF)。得到文件的fd后就可以对文件进行read write close等操作。比如说在51里面你想写一个点亮LED的程序,你需要去看电路图,看LED在哪个引脚,然后给引脚给个1;而在Linux中你只需要open LED所在的文件,然后通过write写一个1进去就行了。(可能你还没有感觉到这个的方便,那么现在来说说发送pwm波)
用51编过发pwm波的同学都知道,程序很长,要用到中断程序啊,什么什么的。我反正写过,很长一串代码。可是在Linux下只需要对三个文件write数就可以发送pwm波:div 和period用于改变pwm的周期,brightness用于改变占空比。就简简单单的对三个文件写数就可以发出你想要的pwm波!就相当于51里面别人已经跟你写好了子函数,你直接在主函数里面调用子函数就可以了,可是51并没有那么好的事情,子函数全靠自己写,而且板子换了子函数也要变。到这里我终于明白老师话的意思了。编程起来既简单又高效,减少了很多繁杂的事,可以节省很多时间下来考虑策略问题。学起来也很简单,只用一个下午就可以解决的差不多。
学控制的童鞋们,赶快去看“嵌入式Linux教程上册”第十一章吧,相信你学会后肯定不会再用51了哈哈哈,我现在都想把51板子给扔了0.0 接下来就是学习can的编程了!
欢迎老师和师兄们补充和更正。