小编mak*_*puf的帖子

ARM Cortex M4(或M3)上的循环计数器?

我正试图在Cortex M4上分析一个C函数(从一个中断调用,但我可以在其他地方提取它并将其分析).

有多少可能计算此功能中通常使用的循环次数?功能应该在大约4000个周期内运行,所以我认为RTC不是一个选项,并且从反汇编中手动计算周期可能很痛苦 - 只有平均才有用,因为我想在具有典型闪存/内存的典型流上进行分析使用模式.

我听说过循环计数器寄存器和MRC指令,但它们似乎可用于A8/11.我还没有在cortex-Mx micros中看到过这样的说明.

embedded arm cortex-m3

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

存储许多日志文件

我有一个系统,它通过http(> 10k生产者,每天10个日志,每个约100行文本)从不同的地方接收日志文件.

我想存储它们以便能够计算misc.每晚统计它们,出口它们(按到达日期或第一行内容排序)......

我的问题是:存储它们的最佳方法是什么?

  • 平面文本文件(具有适当的锁定),每个上传文件一个文件,每天一个目录/生产者
  • 平面文本文件,所有生产者每天一个(大)文件(这里的问题将是索引和锁定)
  • 带有文本的数据库表(由于内部原因,MySQL是首选)(pb与DB清除为删除可能会很长!)
  • 数据库表,每行文本一条记录
  • 具有分片的数据库(每天一个表),允许简单的数据清除.(这是分区.但是我有权访问的mysql版本(即内部支持)不支持它)
  • 基于文档的DBàlacouchdb或mongodb(问题可能与索引/成熟度/摄取速度有关)

有什么建议?

database language-agnostic logging

10
推荐指数
2
解决办法
4575
查看次数

C文字常量:在标题或C文件中?

我想在na单个静态C程序中包含一堆数据(比如图像,还有其他数据,嵌入在可执行文件中,因为我在没有文件的嵌入式平台上工作).

因此,我写了一些img2c从我的数据文件中创建const数据,创建一个带有静态const数组初始化器的文件放到flash中(使用C99很棒的功能)

我的问题是,我应该将它们放在.h文件中,就像我多次看到的那样 - 例如gimp可以保存为.h文件,而不是.c文件 - 或者在.c文件中,仅在标题中引用const extern声明进一步引用,不必包含所有数据并将其全部传递给编译器,并在每次使用它时重新声明它?

预处理器宏是不可能的,因为我将引用它们的地址,而不是每次都包含整个数据.

c const header

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

补偿ARM中断的延迟?

我正在研究STM32F4 CPU上的一个项目,产生信号.

我在STM32上有CPU时钟(没有预分频器)的通用定时器,在溢出时触发中断,然后用GPIO产生周期信号.

我需要在非常精确的时间触发GPIO(基本上低至一个CPU周期精度).通过设置优先级等,我已设法将此抖动减少到+ -5个周期,但这种抖动存在,具体取决于CPU的工作情况.

我需要补偿这几个周期的抖动.只要我在精确的时间切换GPIO,添加几个周期的延迟就不是问题.

我的想法是读取计数器的当前值,并有一个FIXED_NUMBER-CURRENT_VALUE时间的活动循环,确保我将在精确的时间退出循环.

然而,在C中做一个简单的循环 - 一个FOR循环,或一个while(counter-> value <TARGET)不起作用,因为它ADDS抖动而不是减少它.

我做错了什么/天真吗?我应该在集会中这样做吗?怎么会与C不同(我检查了用GCC反汇编来检查循环没有被优化掉,也不是我打了内存?)

(我确保空的,非优化的但不打击内存循环体)

编辑:在AVR上看到这个例子(我知道的更稳定)请参见示例http://lucidscience.com/pro-vga%20video%20generator-7.aspx (搜索"jitter")

edit2:我在汇编中尝试了一个简单的循环,例如(r0是我的计数器,等待的循环次数,在寄存器中)

loop : SUBS r0,#1 ; tried with 2 also
       BGE loop
Run Code Online (Sandbox Code Playgroud)

而且,如果没有它,抖动会更好.

总结起来,我已经知道我应该拖延多少.我只需要一种方法让代码分支在一个案例中可靠地消耗N个循环而在另一个案例中可以消耗M. 不幸的是,单独的分支似乎不起作用,因为管道填充似乎不需要可靠的循环次数,并且条件表达式也不会因为它们总是采用相同数量的循环(有时无效).

从RAM而不是闪存运行会提高一致性吗?(NB stm32f4有一个flash预取..)

counter arm interrupt stm32 low-latency

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

如何处理 HashMap 中的每个值并选择性地拒绝一些值?

我想HashMap一一处理这些值,同时可能会删除其中的一些值。

例如,我想做一个相当于:

use std::collections::HashMap;

fn example() {
    let mut to_process = HashMap::new();
    to_process.insert(1, true);

    loop {
        // get an arbitrary element
        let ans = to_process.iter().next().clone(); // get an item from the hash
        match ans {
            Some((k, v)) => {
                if condition(&k,&v) {
                    to_process.remove(&k);
                }
            }
            None => break, // work finished
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这无法编译:

error[E0502]: cannot borrow `to_process` as mutable because it is also borrowed as immutable
  --> src/lib.rs:12:17
   |
9  |         let ans = to_process.iter().next().clone();
   | …
Run Code Online (Sandbox Code Playgroud)

rust borrow-checker

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