小编Pie*_*ica的帖子

反向迭代器在优化时返回垃圾

我有一个AsIterator模板类,它采用类似数字的类型,在这个例子中只是一个int,并将其转换为迭代器(++--递增和递减数字,并operator*只返回对它的引用).

这工作正常,除非它被包装成a std::reverse_iterator并使用任何优化编译(-O足够).当我优化二进制文件时,编译器去除reverse_iterator对它的取消引用调用,并用一些奇怪的值替换它.必须注意的是,它仍然可以进行正确的迭代次数.它只是反向迭代器获得的值,即垃圾.

请考虑以下代码:

#include <iterator>
#include <cstdio>

template<typename T>
class AsIterator : public std::iterator<std::bidirectional_iterator_tag, T> {
    T v;
public:
    AsIterator(const T & init) : v(init) {}

    T &operator*() { return v; }

    AsIterator &operator++() { ++v; return *this; }
    AsIterator operator++(int) { AsIterator copy(*this); ++(*this); return copy; }
    AsIterator &operator--() { --v; return *this; }
    AsIterator operator--(int) { AsIterator copy(*this); …
Run Code Online (Sandbox Code Playgroud)

c++ reverse iterator loops compiler-optimization

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

XV6 - usys.s它的代码是做什么的?

我从未见过这种汇编语法.

#include "syscall.h"
#include "traps.h"
#define SYSCALL(name) \
  .globl name; \
  name: \
    movl $SYS_ ## name, %eax; \
    int $T_SYSCALL; \
    ret

SYSCALL(fork)
SYSCALL(exit)
SYSCALL(wait)
SYSCALL(pipe)
SYSCALL(read)
SYSCALL(write)
SYSCALL(close)
SYSCALL(kill)
SYSCALL(exec)
SYSCALL(open)
SYSCALL(mknod)
SYSCALL(unlink)
SYSCALL(fstat)
SYSCALL(link)
SYSCALL(mkdir)
SYSCALL(chdir)
SYSCALL(dup)
SYSCALL(getpid)
SYSCALL(sbrk)
SYSCALL(sleep)
SYSCALL(uptime)
Run Code Online (Sandbox Code Playgroud)

xv6

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

Raspberry:通过 DMA 的 PWM 是如何工作的?

我读到“软件 PWM”的驱动程序以某种方式在 PWM-HW 上运行,并在不使用 CPU 的情况下访问所有 GPIO。有人可以解释它是如何工作的吗?Raspberry Pi 中是否有第二个处理器用于 PWM 和 PCM 模块(是否有块图)?

这个问题与我在我的机器人中经常使用的这个优秀的驱动程序有关。

这是解释,不幸的是我不明白......

驱动程序通过设置 DMA 控制块的链接列表来工作,最后一个链接回第一个,因此一旦初始化,DMA 控制器就会连续循环,除非需要更改脉冲宽度,否则驱动程序不需要参与. 对于给定的周期,有两个 DMA 控制块;第一个将单个字传输到 GPIO“清除输出”寄存器,而第二个将一定数量的字传输到 PWM FIFO 以生成所需的脉冲宽度时间。此外,穿插这些控制块的是每个配置的伺服器,用于设置输出。

虽然驱动程序确实使用了 PWM 外设,但它仅使用它来调整 DMA 传输的速度,从而产生准确的延迟。”

以下理解是否正确:

DMA 控制器就像第二个处理器。您可以在其上运行代码。因此,这里使用它与 PWM 块一起控制所有 Raspberry GPIO 引脚的高/低状态。DMA 控制器会连续执行此操作。Raspberry 中可能有不止一个 DMA 控制器,因此 OS Linux 的速度不会因为缺少一个 DMA 控制器而受到太大影响。

我不明白 DMA 和 PWM 究竟是如何协同工作的。

c hardware dma raspberry-pi pwm

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

标签 统计

c ×1

c++ ×1

compiler-optimization ×1

dma ×1

hardware ×1

iterator ×1

loops ×1

pwm ×1

raspberry-pi ×1

reverse ×1

xv6 ×1