小编Sam*_*nko的帖子

C++ Butterworth N阶滤波器设计

我正在寻找一个计算Butterworth Nth滤波器设计系数的函数,如Matlab函数:

[bl,al]=butter(but_order,Ws); 
Run Code Online (Sandbox Code Playgroud)

[bh,ah]=butter(but_order,2*bandwidth(1)/fs,'high');
Run Code Online (Sandbox Code Playgroud)

我发现了许多计算二阶但不是N阶的例子(例如我使用的是18阶...). - 遗憾的是我对DSP没有任何了解.

您知道任何库或方法来轻松实现此方法吗?当我知道订单时,切断频率和采样率.我只需要得到B(分子)和A(分母)的向量.

还要求该方法在不同平台下工作 - Windows,Linux,...

提前致谢.

c++ filtering signal-processing

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

循环遍历文件并在C中打印文件属性

我是C语言编程的新手.我需要这个程序遍历文件夹中的所有文件并为每个文件打印这些属性.此时它正在打印文件夹的属性.

#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <dirent.h>

int main(int argc, char *argv[])
{
    DIR *dp;
    struct stat file_stats;

    if (argc != 2) {
        fprintf(stderr, "Usage: fstat FILE...\n");
        return EXIT_FAILURE;
    }

    if ((stat(argv[1], &file_stats)) == -1) {
        perror("fstat");
        return EXIT_FAILURE;
    }

    dp = opendir("./");
    if (dp == NULL) {
        perror("couldn't open directory");
        return EXIT_FAILURE;
    }

    while (readdir(dp)) {
        printf("filename: %s\n", argv[1]);
        printf(" device: %lld\n",
                file_stats.st_dev);
        printf(" protection: %o\n",
                file_stats.st_mode);
        printf(" number of hard links: %d\n", …
Run Code Online (Sandbox Code Playgroud)

c linux posix while-loop

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

打印TCP数据包数据

在TCP通信中,当数据包从以太网传输到网络(IP)层时,我想打印该数据包中存在的数据?

我正在研究linux.

我得到了一些信息,它可以借助linux内核代码完成,即在linux NAT防火墙代码中.但是我会在哪里获得内核源代码?这些编码在哪里?

c hook tcp netfilter linux-kernel

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

lsof:socket括号内的数字代表什么

当我在名称列中运行 lsof 命令时,对于套接字,一些数字出现在括号中,如下所示。这是什么意思?

 command    pid        user      fd                 Name
 process    8197       root      29                 socket:[3050474]
Run Code Online (Sandbox Code Playgroud)

linux lsof

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

在 Linux 中,符号链接的值可以长于 PATH_MAX 吗?

每个幼儿园的孩子都知道,Linux 中的文件路径不能超过PATH_MAX字符。

但是在我的系统上试验,命令

ln -s $(for i in {0..1024}; do printf dir/../; done)foobar foobar1
Run Code Online (Sandbox Code Playgroud)

失败并显示错误消息File name too long

我不太明白为什么。这里没有长文件名,只有文件的预期内容foobar1很长。甚至还没有人试图遍历符号链接的内容以到达目标。当然,我可以拥有一个内容远大于PATH_MAX.

另一方面,像这样的命令

for i in {0..4096}; do ln -s $i $(expr $i + 1); done
Run Code Online (Sandbox Code Playgroud)

成功。只有当我试图遍历链时,系统才会抱怨。

但我对遍历任何东西都不感兴趣。我正在编写必须读取符号链接值(无需遍历)的软件,我想知道是否需要考虑很长的值。

在 Linux 中哪里记录了这是不允许的?或者它是否依赖于文件系统实现并且可以更改?

linux filesystems

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

是否有一个最小的文件集可以从 Linux 内核编译中保留,以便稍后根据需要编译内核模块?

编译Linux内核后,我需要在磁盘中保留巨大的souce目录,以供进一步的外部模块编译。

我不能简单地运行make clean,因为当我以这种方式编译某些模块时,这会失败:

$ make -C /lib/modules/`uname -r`/build
Run Code Online (Sandbox Code Playgroud)

我粗略地阅读了内核源代码的Makefile,但似乎没有一个目标来完成这项工作。

问题:

我应该从工作的 Linux 源目录中复制哪些有价值的文件,以便进一步使用编译外部模块?

linux linux-kernel

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

将设备树中断标志映射到devm_request_irq

我目前正在为Linux使用PowerPC编写设备驱动程序.

设备树条目如下:

// PPS Interrupt client 
pps_hwirq {
    compatible = "pps-hwirq";
    interrupts = <17 0x02>;                     // IPIC 17 = IRQ1, 0x02 = falling edge
    interrupt-parent = < &ipic >;
};
Run Code Online (Sandbox Code Playgroud)

0x02标志非常重要 - PPS与下降沿对齐,但这在GPS接收器上不是通用的,因此应该是可配置的.

probe()驱动程序的功能中,获取IRQ编号很简单:

hwirq = irq_of_parse_and_map(np, 0);
if (hwirq == NO_IRQ) {
    dev_err(&pdev->dev, "No interrupt found in the device tree\n");
    return -EINVAL;
}
Run Code Online (Sandbox Code Playgroud)

但是如何将IRQ标志从设备树映射到驱动程序?

/* ****TODO****: Get the interrupt flags from the device tree 
 * For now, hard code to suit my problem, but since this …
Run Code Online (Sandbox Code Playgroud)

linux-device-driver linux-kernel device-tree

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

切换到用户模式时,非抢占式内核和抢占式内核有什么区别?

我正在阅读“了解 Linux 内核,第 3 版”,在第 5 章“内核抢占”部分,它说:

所有进程切换都由switch_to宏执行。在抢占式和非抢占式内核中,当进程完成内核活动的某个线程并调用调度程序时,会发生进程切换。但是,在非抢占式内核中,除非即将切换到用户模式,否则无法替换当前进程。

我仍然没有看到非抢占式内核和抢占式内核之间的区别,因为无论如何您都需要等待当前进程切换到用户模式。

假设有一个进程p在内核模式下运行,并且其时间片到期,然后scheduler_tick()调用 ,并设置pNEED_RESCHED标志。但是只有在p切换到用户模式时才会调用(对吧?)。schedule()

那么如果p永远不会切换到用户模式呢?

如果它切换到用户模式,但在scheduler_tick()设置NEED_RESCHED的时刻和p实际切换到用户模式的时刻之间需要“很长”的时间——那么它使用的比它的量子还多?

linux operating-system kernel linux-kernel preemption

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

在linux内核中返回错误代码

我试图了解 Linux 系统调用如何返回错误代码。我遇到了times()系统调用。这个简单的系统调用将一些数据复制到用户空间,如果该操作不成功,则返回-EFAULT

SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
{
    if (tbuf) {
        struct tms tmp;

        do_sys_times(&tmp);
        if (copy_to_user(tbuf, &tmp, sizeof(struct tms)))
            return -EFAULT;
    }
    force_successful_syscall_return();
    return (long) jiffies_64_to_clock_t(get_jiffies_64());
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么-EFAULT?不应该EFAULT没有减号吗?
  2. 返回负错误代码很常见吗?

error-code system-calls linux-kernel

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

Linux内核中的gpiod_*vs gpio_*方法

Linux设备驱动程序编程中的哪个GPIO API更可取,在什么条件下:gpio_set_value()gpiod_set_value()

一个采用GPIO desc作为对象,而另一个采用从设备树解析的GPIO.

device-driver linux-kernel device-tree

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