小编Vir*_*mar的帖子

在编写设备驱动程序时,linux中__iomem的用途是什么?

我已经看到它__iomem用于存储返回类型ioremap(),但我u32在ARM体系结构中使用它并且它运行良好.

那么__iomem这里有什么不同呢?在哪种情况下我应该使用它?

linux memory-management linux-device-driver linux-kernel

19
推荐指数
1
解决办法
1万
查看次数

为什么softirq用于高线程和高频率用途?

是什么让softirq如此特别,以至于我们将它用于高频率用途,如网络驱动程序和块驱动程序.

linux interrupt linux-device-driver linux-kernel softirq

6
推荐指数
1
解决办法
2万
查看次数

Linux驱动程序和Android驱动程序有什么区别

由于 android 内核是 linux 内核的黑客版本..

因此,我们为 linux 编写驱动程序的方式在 android 中是否有效,或者需要进行一些修改。?

linux android device-driver

5
推荐指数
1
解决办法
4891
查看次数

什么是C中的固定地址变量

我在书籍和嵌入式系统相关网站上看到了很多这样的例子.据我所知,它用于访问存储在固定内存地址中的数据.这是我在一本书中得到的例子;

unsigned char *p=(unsigned char *)0x41E;
Run Code Online (Sandbox Code Playgroud)

什么是类型转换的用途(unsigned char *),我们可以直接使用

unsigned char *p=0x41E;
Run Code Online (Sandbox Code Playgroud)

请详细解释一下,在那里使用类型转换有什么用,我们将地址0x41E本身存储到指针中p还是存储了其他内容?

我完全糊涂了.请帮忙.

c embedded pointers memory-management

3
推荐指数
2
解决办法
348
查看次数

为什么在“free”之后取消引用 C 指针的值为 0

下面是代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *p;
    p=(int *)malloc(sizeof(int));
    *p=5;
    printf("Before freeing=%p\n",p);
    printf("Value of p=%d\n",*p);
    //making it dangling pointer
    free(p);
    printf("After freeing =%p\n",p);
    printf("Value of p=%d\n",*p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

下面是输出:

Before freeing=0x1485010
Value of p=5
After freeing =0x1485010
Value of p=0
Run Code Online (Sandbox Code Playgroud)

释放指针后,解引用给出输出“0”(零)。

下面是另一个也给出“0”的代码

include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p=(int *)malloc(sizeof(int));

printf("Before freeing=%p\n",(void *)p);
printf("Value of p=%d\n",*p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在这个我没有释放内存,只是分配了它,它仍然给出 '0' 。是不是每个未初始化指针的默认值都是'0'??

为什么会这样?

c pointers

2
推荐指数
1
解决办法
1139
查看次数

'i2c_get_clientdata'和"i2c_set_clientdata"有什么用?

我一直在研究I2C驱动程序(客户端)代码.我在每个地方看过这个函数"i2c_get_clientdata"和"i2c_set_clientdata".

我在这里看到了这个问题. 使用指针结构而不是创建静态本地副本

有时我觉得像"container_of"宏一样得到指向结构的指针.但我仍然没有正确理解为什么要使用它以及何时使用它.

下面我发布一个示例代码,我看到它的用法.如果有人可以帮助我理解为什么在那里使用它,当我们编写自己的驱动程序时我们将使用它.

struct max6875_data {
    struct i2c_client       *fake_client;
    struct mutex            update_lock;

    u32                     valid;
    u8                      data[USER_EEPROM_SIZE];
    unsigned long           last_updated[USER_EEPROM_SLICES];
};

static ssize_t max6875_read(struct file *filp, struct kobject *kobj,
                        struct bin_attribute *bin_attr,
                        char *buf, loff_t off, size_t count)
{
    struct i2c_client *client = kobj_to_i2c_client(kobj);
    struct max6875_data *data = i2c_get_clientdata(client);
    int slice, max_slice;

    if (off > USER_EEPROM_SIZE)
            return 0;

    if (off + count > USER_EEPROM_SIZE)
            count = USER_EEPROM_SIZE - off;

    /* refresh slices which contain requested bytes */
    max_slice = …
Run Code Online (Sandbox Code Playgroud)

i2c linux-device-driver linux-kernel embedded-linux

2
推荐指数
1
解决办法
4076
查看次数

为什么我们需要创建一个中断向量表?

我在网上的一些教程中读到,中断的分支地址已经硬连线.他们为什么需要在引导程序中创建IVT?

linux arm avr interrupt bootloader

1
推荐指数
2
解决办法
1568
查看次数

如何在更少的内存中执行大代码?

我怀疑,在所有微控制器中,闪存更多是ram(例如:atmega16它是16k,但RAM只有1 Kb)..

那么,如何执行代码,CPU是否直接从Flash本身执行,如果是,那么是否使用了给出的那个小RAM.

ram microcontroller avr atmel atmega16

1
推荐指数
1
解决办法
536
查看次数

在命令提示符下将文件的内容重定向到变量

我有一个文件"file.txt",其中包含"dir/s/b*.c"的输出

我想在单个变量中写入file.txt的整个内容.

有任何想法吗?

windows cmd batch-file

1
推荐指数
1
解决办法
1057
查看次数