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

   最近一直在看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这些命令的作用:产生命令码字!按照一定的规律,保证整个系统命令不乱

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值