您的位置:首页 > 编程语言

从Cortex-M0编程方法到ARM9编程方法思想转变------定义命令

2012-08-01 17:12 211 查看
最近一直在看ARM9编程,买了一块开发板,卖开发板的商家和我说,“板子不跑Linux,那就不叫嵌入式编程”。我听了之后很是纳闷,那以前学的是什么?不都白学了。

已经研究嵌入式Linux编程有一段时间了,慢慢的有点明白了嵌入式Linux编程方法和思想,但是不能窥其全貌,就在今天下午,慢慢的理解了一个知识点,写下来和大家分享。

在嵌入式Linux编程中,有个非常重要的函数叫做:ioctl(),上面一篇文章已经把ioctl()中的定义命令的头文件展现给大家了,很多人会觉得很烦人,一堆宏定义,而且要这个有什么用,其实笔者一直也这样想,真是烦人,最重要的是不会用,要这个定义命令的宏来干嘛?

今天在调试一个程序的时候(都是大牛写好的,我等菜鸟只能一边看大牛的程序,一边学习),看到了这个定义,结合以前看的视频,总算明白了它的用处,让我们先看点代码:

#define DTUCTRL_POWER _IOW('h', 0x01, unsigned long) /* cdma power */


关于IO之类的宏定义就不详细说明了,这里定义了一个命令,DTUCTRL_POWER,它后面那一串是什么呢?没事我们把它打印出来:

printf("DTUCTRL_POWER----%x\n",DTUCTRL_POWER);


打印结果:DTUCTRL_POWER----40046801

或许一个大家看不出是什么意思,没事,我又定义了几个命令:

#define DTUCTRL_RESET _IOW('h', 0x02, unsigned long) /* cdma reset */
#define DTUCTRL_ONOFF _IOW('h', 0x03, unsigned long) /* cdma on/off */
#define DTUCTRL_SYSTEM _IOW('h', 0x04, unsigned long) /* cdma system run */
#define DTUCTRL_SYSTEM_TOGGLE _IO('h', 0x05) /* system run trigger */


并且依旧把他们都打印出来,结果如下:

DTUCTRL_RESET----40046802

DTUCTRL_ONOFF----40046803

DTUCTRL_SYSTEM----40046804

DDTUCTRL_SYSTEM_TOGGLE----6805

聪明的你或许已经看出来,那些乱的很的IO命令到底有什么用,没错,它就是帮我们定义个命令码,以前我们变成的时候,完全可以从0x01,0x02...这样往后定义命令,命令少还可以,如果多的话,就会混在一起,到时候连自己都分不清,而运用这个宏定义,就可以清晰的去定义命令,通过上一篇文章可以知道,Linux将命令32位分成了几个段,每个段赋予不同的值,在通过IO之类的宏定义,生成一个不会重复,而且非常好记的命令

这就是IO这些命令的作用:产生命令码字!按照一定的规律,保证整个系统命令不乱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐