开发者社区> morixinguan> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Linux驱动开发——__stringify

简介: 在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下: #ifndef __LINUX_STRINGIFY_H#define __LINUX_STRINGIFY_H /* Indirect stringification.
+关注继续查看

在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下:

#ifndef __LINUX_STRINGIFY_H
#define __LINUX_STRINGIFY_H

/* Indirect stringification.  Doing two levels allows the parameter to be a
 * macro itself.  For example, compile with -DFOO=bar, __stringify(FOO)
 * converts to "bar".
 */

#define __stringify_1(x...)    #x
#define __stringify(x...)    __stringify_1(x)

#endif    /* !__LINUX_STRINGIFY_H */

其作用实际上就是 把  x 直接转换为字符串。其返回值就是字符串,而不是变量名。

用法1:

  #define __ATTR(_name,_mode,_show,_store) { /
    .attr = {.name = __stringify(_name), .mode = _mode }, /
    .show = _show,    /
    .store = _store,    /
    }

假设我们这样使用  __ATTR: 

                      __ATTR(var_name, 777,  show_function, store_function)

  那么,实际上 复制给  .attr.name 的值是 "var_name" ,而不是var_name 变量所代表的值。

用法2:将枚举类型转换为字符串

#define WCD_MBHC_STRINGIFY(s)  __stringify(s)

enum wcd_notify_event {
    WCD_EVENT_INVALID,
    /* events for micbias ON and OFF */
    WCD_EVENT_PRE_MICBIAS_2_OFF,
    WCD_EVENT_POST_MICBIAS_2_OFF,
    WCD_EVENT_PRE_MICBIAS_2_ON,
    WCD_EVENT_POST_MICBIAS_2_ON,

 

static const char *wcd_mbhc_get_event_string(int event)
{
    switch (event) {
    case WCD_EVENT_PRE_MICBIAS_2_OFF:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_OFF);
    case WCD_EVENT_POST_MICBIAS_2_OFF:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_POST_MICBIAS_2_OFF);
    case WCD_EVENT_PRE_MICBIAS_2_ON:
        return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_ON);

本文永久更新链接地址http://www.linuxidc.com/Linux/2016-09/135383.htm

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
zynq操作系统: Linux驱动开发串口波特率 非标准波特率 10mb
zynq操作系统: Linux驱动开发串口波特率 非标准波特率 10mb
0 0
zynq操作系统: Linux驱动开发串口篇
串口( UART)是一种非常常见的外设, 串口在嵌入式开发领域当中一般作为一种调试手段,通过串口将调试信息打印出来,或者通过串口发送指令给主机端进行处理;当然除了作为基本的调试手段之外,还可以通过串口与其他设备或传感器进行通信, 譬如有些 sensor 就使用了串口通信的方式与主机端进行数据交互。
0 0
zynq操作系统: Linux驱动开发Gpio中断篇
Linux内核中有一套GPIO框架,管理和控制芯片上的GPIO管教,包括配置输入输出,配置电平高低(输出)和获取电平高低(输入),中断管理。只需要通过读取/sys/class/gpio/gpioN/value的值来获取中断。当然也不是简单的read,而是通过epoll、poll、select等这些IO复用函数来控制,对于epoll或者poll,需要监听的事件是EPOLLPRI或POLLPRI,而不是EPOLLIN或POLLIN,对于select,需要将文件描述符放在exceptfds中,而且文件描述符被触发时需要通过调用read读取数据,还要通过lseek将文件流指针置回文件开头。
0 0
zynq操作系统: Linux驱动开发Bram篇
zynq操作系统: Linux驱动开发Bram篇
0 0
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(六)I2C总线驱动
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(六)I2C总线驱动
0 0
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(二)——并发与同步
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(二)——并发与同步
0 0
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(一)——字符设备驱动
嵌入式实践教程--【Linux驱动】Linux驱动开发基于Linux4.0+(一)——字符设备驱动
0 0
Linux驱动开发: Linux下RTC实时时钟驱动
Linux驱动开发: Linux下RTC实时时钟驱动
0 0
+关注
morixinguan
ITGEGE在线教育嵌入式开发讲师。 CSDN博客专家、CSDN-Linux特邀编辑、CSDN博乐、CSDN学院讲师,目前从事嵌入式开发领域,从事与单片机,Linux,android相关的产品开发。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Decian GNU/Linux安全合规之路
立即下载
从 Linux 系统内核层面来解决实际问题的实战经验
立即下载
冬季实战营第二期:Linux操作系统实战入门
立即下载