Performance 如何在低资源设备上测试算法性能?
我对使用atmel avr控制器从LIN总线读取数据感兴趣。不幸的是,这种总线上的消息没有开始或结束指示器,唯一合理的解决方案似乎是暴力解析。来自总线的可用数据加载到循环缓冲区中,蛮力方法在缓冲区中查找有效消息 使用64字节缓冲区和20MHZ attiny时,如何测试代码的性能,以确定是否可能发生缓冲区溢出?补充:我担心的是算法会运行缓慢,从而缓冲更多的数据Performance 如何在低资源设备上测试算法性能?,performance,algorithm,testing,arduino,attiny,Performance,Algorithm,Testing,Arduino,Attiny,我对使用atmel avr控制器从LIN总线读取数据感兴趣。不幸的是,这种总线上的消息没有开始或结束指示器,唯一合理的解决方案似乎是暴力解析。来自总线的可用数据加载到循环缓冲区中,蛮力方法在缓冲区中查找有效消息 使用64字节缓冲区和20MHZ attiny时,如何测试代码的性能,以确定是否可能发生缓冲区溢出?补充:我担心的是算法会运行缓慢,从而缓冲更多的数据 关于蛮力算法。缓冲区中的第二个元素假定为消息大小。例如,若假定长度为22,则对前21个字节进行异或运算,并针对缓冲区中的第22个字节进行测
关于蛮力算法。缓冲区中的第二个元素假定为消息大小。例如,若假定长度为22,则对前21个字节进行异或运算,并针对缓冲区中的第22个字节进行测试。如果校验和通过,代码将检查第一个(SRC)和第三个(DST)字节是否是它们应该是的。AVR是最容易进行性能分析的微控制器之一,因为它是一台RISC机器,具有简单的指令集和众所周知的每条指令执行时间 所以,最基本的步骤是,你拿着装配图,开始计算不同的场景。基本寄存器操作需要一个时钟周期,分支通常需要两个周期,内存访问需要三个周期。XORing循环可能需要每个字节5-10个循环,因此它相对便宜。如何掌握汇编代码取决于编译器,但所有编译器都倾向于以合理易读的形式给出最终结果 通常,如果不了解算法和时间要求,就不可能对这类问题给出明确的答案。但是,由于LIN总线速度限制为20 kbit/s,因此每个字节大约有10000个时钟周期。这对几乎任何事情都足够了
一个更困难的问题是如何处理依赖于时间的LIN帧。这不是一个很好的习惯,因为它确实需要微控制器付出额外的努力。(使用第9位到底有什么问题?) LIN框架由一个
- 中断(至少13位时间)
- 同步分隔符(0x55)
- 消息id(8位)
- 消息(0..8 x 8位)
- 校验和(8位)
如果你不能确保你的时钟与moster时钟足够同步(+-4%),那么你就必须看一下#4,它可能更有启发性,但相当乏味。你的基本问题是(在我看来): 如何测试代码的性能,以确定是否可能发生缓冲区溢出
在算法开始时将管脚设置为高,在算法结束时将其设置为低。在示波器上查看它(我假设您有一个这样的系统——没有它,嵌入式开发非常困难。)您将能够测量算法所需的最大时间,并了解其可变性。我不太熟悉LIN总线帧,但我假设它与发送和接收数据的定时控制有关。ATmel为汽车应用提供全方位解决方案,包括微控制器、lin控制器和电压调节器。我们假设lin控制器将处理所有必要的定时,并为微控制器提供cmos级RX/TX。无论如何,感谢您提供的信息和您的答案。请参阅我编辑的答案。有关更完整的说明,请参阅,例如。最困难的问题是您是否需要同步