打印
[牛人杂谈]

【转】从Cortex-M0编程方法到ARM9编程方法思想转变------定义...

[复制链接]
682|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
焚琴煮鹤|  楼主 | 2017-2-23 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  最近一直在看ARM9编程,买了一块开发板,卖开发板的商家和我说,“板子不跑Linux,那就不叫嵌入式编程”。我听了之后很是纳闷,那以前学的是什么?不都白学了。
    已经研究嵌入式Linux编程有一段时间了,慢慢的有点明白了嵌入式Linux编程方法和思想,但是不能窥其全貌,就在今天下午,慢慢的理解了一个知识点,写下来和大家分享。

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

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

   

[cpp] view plain copy


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



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

[cpp] view plain copy


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


打印结果:DTUCTRL_POWER----40046801

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


[cpp] view plain copy


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


沙发
zhuotuzi| | 2017-2-23 20:12 | 只看该作者
不要听人家瞎说,并不是弄了Linux就是嵌入式,单片机也是嵌入式概念。

使用特权

评论回复
板凳
wahahaheihei| | 2017-2-23 21:45 | 只看该作者
卖家自吹自擂,忽悠你买呢。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
john_lee + 3 淡定
地板
598330983| | 2017-2-24 13:46 | 只看该作者
只玩过M0和M4的路过。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

106

帖子

3

粉丝