标签: avr

更快的16位乘法算法,适用于8位MCU

我正在寻找一种算法来乘以两个比下面更好的整数.你有一个好主意吗?(MCU - AT Tiny 84/85或类似 - 此代码运行的地方没有mul/div运算符)

uint16_t umul16_(uint16_t a, uint16_t b)
{
    uint16_t res=0;

    while (b) {
        if ( (b & 1) )
            res+=a;
        b>>=1;
        a+=a;
    }

    return res;
}
Run Code Online (Sandbox Code Playgroud)

当使用avr-gcc编译器为AT Tiny 85/84编译时,该算法几乎与avr-gcc生成的算法__mulhi3相同.

avr-gcc算法:

00000106 <__mulhi3>:
 106:   00 24           eor r0, r0
 108:   55 27           eor r21, r21
 10a:   04 c0           rjmp    .+8         ; 0x114 <__mulhi3+0xe>
 10c:   08 0e           add r0, r24
 10e:   59 1f           adc r21, r25
 110:   88 0f           add r24, r24
 112:   99 1f           adc r25, …
Run Code Online (Sandbox Code Playgroud)

c c++ algorithm microcontroller avr

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

如何可视化AVR程序的内存(SRAM)使用?

我在AVR微控制器(ATMega328P)上运行的C程序中遇到了问题.我相信这是由于堆栈/堆冲突,但我希望能够证实这一点.

有没有什么办法可以通过堆栈和堆来可视化SRAM的使用?

注意:该程序使用avr-gcc编译并使用avr-libc.

更新:我遇到的实际问题是malloc实现失败(返回NULL).所有malloc这些都是在启动时发生的,所有这些都free发生在应用程序的最后(实际上从来没有,因为应用程序的主要部分处于无限循环中).所以我确定碎片不是问题.

memory embedded debugging avr avr-gcc

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

使用Arduino库获取常规AVR代码

我有一个Arduino Uno和一个Linux环境.尽管Arduino IDE非常棒,但是如果出现问题,它并没有给我太多的帮助.它也变得极其缓慢并且有时会停止与芯片通信.

另一种方法是使用AVR-GCC/g ++和AVRDude工具链对我的Arduino Uno进行编码.但是,在使用简单的文本编辑器和命令行工具进行编程时,我非常希望能够访问与Arduino相同的功能(如Serial,digitalWrite等).

所以我试图找到头文件,其中定义了所有函数,即"Arduino.h" /usr/share/arduino/hardware/arduino/cores/arduino.

我用它来编译(使用makefile来做这个)

avr-gcc -mmcu=atmega328p -I. -gdwarf-2 -DF_CPU=16000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=testarduino.o -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/standard -std=gnu99 -MMD -MP -MF .dep/testarduino.elf.d testarduino.o --output testarduino.elf -Wl,-Map=testarduino.map,--cref     -lm
Run Code Online (Sandbox Code Playgroud)

编译这段代码:

#include "Arduino.h"

int main(void)
{
    init();
    pinMode(13,OUTPUT);
    while(1){
    digitalWrite(13,HIGH);
    delay(1000);
    digitalWrite(13,LOW);
    delay(1000);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译时(似乎未定义引用'xxxxxxxxx')似乎没有识别出任何函数.那么需要包含哪些确切的头文件以确保我可以使用相同的功能?还是我错过了别的什么?

avr arduino libraries

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

当ISR运行并发生另一个中断时会发生什么?

如果ISR正在运行,会发生另一个中断,会发生什么?第一个中断是否被中断?第二个中断会被忽略吗?或者在第一次ISR完成后会发射吗?

编辑 我忘了将它包含在问题中(但我将其包含在标签中),我想问一下这是如何在Atmel AVR上运行的.

embedded avr interrupt

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

用于在嵌入式CPU和PC之间进行通信的协议

我正在构建一个带有自己的CPU(AVR Mega8)的小型设备,它应该连接到PC.假设已完成物理连接和字节传递,那么在这些字节之上使用的最佳协议是什么?计算机需要能够在设备上设置某些电压,并回读某些其他电压.

目前,我正在考虑一个完全由主机驱动的同步协议:计算机发送请求,嵌入式CPU应答.还有其他想法吗?

embedded avr communication-protocol

18
推荐指数
3
解决办法
2732
查看次数

混合C和汇编源并使用cmake构建

我正在使用eclipse构建一个混合汇编代码和C源文件的avr-gcc项目.我想摆脱eclipse的自动makefile生成,因为我需要将一些进程自动化到makefile中以及其他原因.

我之前使用过cmake,我很满意它,所以我想尝试使用它来编译我的源文件.一切都按预期运行C源.问题是,最后我需要编译一些汇编文件(实际上是2)并将它们添加到目标.

我google了一下,但我找不到这样做的方法.有人知道如何做到这一点?

问题是在eclipse中我有-x assembler-with-cpp

添加到gcc参数列表中.我需要找到一种方法,有选择地将此参数添加到标准gcc参数列表中仅用于asm文件.我没有找到任何方式来做这件事.

先感谢您

解决方案:在CMakeLists.txt中设置每个文件以在同一列表中编译

enable_language(C ASM)

set ( SOURCES 
    foo.c
    bar.c
    foobar.s
)

add_executable(program  ${SOURCES} ) 
Run Code Online (Sandbox Code Playgroud)

在工具链文件中,您应该放置:

SET(ASM_OPTIONS "-x assembler-with-cpp")
SET(CMAKE_ASM_FLAGS "${CFLAGS} ${ASM_OPTIONS}" )
Run Code Online (Sandbox Code Playgroud)

第二行就是在编译asm文件时需要传递额外的选项.我想传递所有CFLAGS和一些ASM_OPTIONS

c assembly gcc avr cmake

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

嵌入式处理器的快速斜边算法?

是否有一种聪明/有效的算法来确定角度的斜边(即sqrt(a² + b²)),在没有硬件乘法的嵌入式处理器上使用定点数学运算?

c embedded avr

16
推荐指数
6
解决办法
3891
查看次数

在Arduino中使用谷歌的"协议缓冲区"

是否有可能使Google 协议缓冲区在Arduino中运行?

我已经尝试了大约一个星期但无法使其工作,我想知道它是否可能.

avr arduino protocol-buffers

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

在嵌入式系统上使用动态数据接口有多糟糕?

因此,在嵌入式系统部门,我明年将参加大学,我们将了解到动态数据结构在嵌入式系统程序中是一件坏事.但讲义没有说明原因.

现在我正在开发一个中等规模的嵌入式系统LURC控制器,主要是利用AVR169MEGA的"Butterfly"演示板的外围设备.产生4个PWM信号来控制伺服和ESC.并提供9 seg液晶屏.

现在我想不出任何更好的存储指令的方法,因为它们是收到的小瓶USART序列,而不是队列.尤其是我需要等待收到未知数​​量的数据的东西:例如,要在LCD屏幕上显示的字符串.

那你为什么不在嵌入式系统的微控制器上使用动态数据结构呢?只是你在一个严重的内存限制环境中,并且必须确保你的mallocs成功吗?

queue stack avr list

14
推荐指数
3
解决办法
9668
查看次数

转到AVR架构的端口?

自从我听说谷歌的新语言Go之后我就想用它来进行微控制器编程.特别是像Atmega系列这样的Atmel AVR微控制器.这个架构有Go端口吗?

programming-languages avr go

14
推荐指数
3
解决办法
6021
查看次数