查看AVR指令集,2010年增加了四条指令
LAC load and clear
LAS load and set
LAT load and toggle
XCH load and exchange
Run Code Online (Sandbox Code Playgroud)
有谁知道芯片有这些说明
哪些工具支持这些说明
有关他们所做工作的更多信息
(Z)< - Rd v(Z),Rd < - (Z)
这是否意味着Rd和(Z)获得相同的值或者Rd获得Z指向的预修改值?
目前编码atmel tiny45微控制器,我使用了几个查找表.存放它们的最佳位置在哪里?你能给我一个关于sram-flash-eeprom之间内存速度差异的一般概念吗?
我希望能够使用通过USB连接到PC的红外遥控传感器来打开和关闭电脑.该传感器是一个定制PCB,采用AVR微处理器和V-USB软件USB实现.
现在,关闭电脑对软件没问题,但有没有办法用USB打开电脑?
(请注意,我不是在谈论从USB记忆棒或USB电源启动......)
我有一个中断处理程序,运行速度不够快,我想做的事情.基本上我用它来生成正弦波,通过从AVR微控制器上的查找表输出值到PORT,但不幸的是,这种情况发生的速度不足以让我获得我想要的波的频率.有人告诉我,我应该考虑在汇编中实现它,因为编译器生成的汇编可能效率稍低,并且可以进行优化,但在查看汇编代码后,我真的看不到我能做什么更好.
这是C代码:
const uint8_t amplitudes60[60] = {127, 140, 153, 166, 176, 191, 202, 212, 221, 230, 237, 243, 248, 251, 253, 254, 253, 251, 248, 243, 237, 230, 221, 212, 202, 191, 179, 166, 153, 140, 127, 114, 101, 88, 75, 63, 52, 42, 33, 24, 17, 11, 6, 3, 1, 0, 1, 3, 6, 11, 17, 24, 33, 42, 52, 63, 75, 88, 101, 114};
const uint8_t amplitudes13[13] = {127, 176, 221, 248, 202, 153, 101, 52, 17, 1, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Arduino库,它可以最大限度地延长AVR EEPROM的使用寿命.它需要您想要存储的变量数量,其余部分.这是我的尝试,在所有情况下都不起作用.
Atmel表示,每个存储器单元的额定写入/擦除周期为100,000次.他们还提供了一份应用说明,介绍了如何进行磨损均衡.以下是应用笔记的摘要.
通过在两个存储器地址之间交替写入,我们可以将擦除/写入增加到200,000个周期.三个存储器地址为您提供300,000个擦除/写入周期,依此类推.要自动执行此过程,将使用状态缓冲区来跟踪下一次写入的位置.状态缓冲区的长度也必须与参数缓冲区的长度相同,因为也必须对其进行磨损均衡.由于我们无法存储下一个写入的索引,因此我们在状态缓冲区中增加相应的索引.
这是一个例子.
<------------------- EEPROM -------------------->
0 N
-------------------------------------------------
Parameter Buffer | Status Buffer |
-------------------------------------------------
Initial state.
[ 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 ]
First write is a 7. The corresponding position
in the status buffer is changed to previous value + 1.
Both buffers are circular.
[ 7 | 0 | 0 | 0 | …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试avr-llvm(支持AVR作为目标的llvm).我的主要目标是使用它希望更好的优化器(与gcc相比)来实现更小的二进制文件.如果你对AVR了解一点,你知道你只有很少的记忆.
我目前使用的是一个ATTiny45,4KB闪存和256字节(只是字节而不是KB!)的SRAM.
我正在尝试编译一个简单的C程序(见下文),以检查生成的汇编代码以及机器代码大小的开发方式.我使用"clang -Oz -S test.c"来生成组件输出并优化它以实现最小尺寸.我的问题是不必要的保存寄存器值,知道这种方法永远不会返回.
我怎么能告诉llvm它可以破坏任何寄存器,如果需要而不保存/恢复它的内容?任何想法如何更优化它(例如更高效的堆栈设置)?
这是我的测试程序.如上所述,它是使用"clang -Oz -S test.c"编译的.
#include <stdint.h>
void __attribute__ ((noreturn)) main() {
volatile uint8_t res = 1;
while (1) {}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它只有一个类型为uint8_t的"volatile"变量(如果我没有将它设置为volatile,那么所有内容都会被优化掉).此变量设置为1.最后有一个无限循环.现在让我们看一下程序集输出:
.file "test.c"
.text
.globl main
.align 2
.type main,@function
main:
push r28
push r29
in r28, 61
in r29, 62
sbiw r29:r28, 1
in r0, 63
cli
out 62, r29
out 63, r0
out 61, r28
ldi r24, 1
std Y+1, r24
.BB0_1:
rjmp .BB0_1
.tmp0:
.size main, …Run Code Online (Sandbox Code Playgroud) 我只使用过AVR和MSP430,但对于这两种情况都是如此.在编译和静态链接之后,我的最终ELF二进制文件大约为208kB,而Intel Hex二进制文件大约为41kB.AVRDUDE告诉我上传大约18kB.这里到底发生了什么?
寻找用于加密C中字节数组的建议和一些参考代码.问题是我必须与其他例程一起装入1KByte内存,MCU只有8MHz.所以尺寸和速度是关键.我已经检查过Rijndael,但它有很大的表用于我的MCU.基本上我要在PC上加密intel hex格式,可能只有数据区,然后在MCU中解密.
不希望使用动态内存分配例程.
我的谷歌搜索带来了所有C#实现,使用库.
更新:
解密方限制:
RAM: 512 byte
MAX code size: 512-1024 words
CPU: 8 bit, 8MHz
Run Code Online (Sandbox Code Playgroud) 我正在使用AVR-GCC 4.9.2,我想知道如果我在AVR的ISR中过早返回会发生什么?
ISR(USART_RXC_vect)
{
...
if(idx == BUFSIZE)
return;
...
}
Run Code Online (Sandbox Code Playgroud)
会return被翻译成reti指令吗?或者我需要reti()自己加入?
我正在寻找幕后发生的事情的详细解释.
我在嵌入式C中做了一些工作,加速度计将数据作为14位2的补码数返回.我将这个结果直接存储到一个uint16_t.稍后在我的代码中,我试图将这个"原始"形式的数据转换为有符号整数,以表示/使用我的其余代码.
我无法让编译器了解我想要做什么.在下面的代码中,我正在检查第14位是否已设置(意味着数字为负),然后我想反转这些位并加1以获得数字的大小.
int16_t fxls8471qr1_convert_raw_accel_to_mag(uint16_t raw, enum fxls8471qr1_fs_range range) {
int16_t raw_signed;
if(raw & _14BIT_SIGN_MASK) {
// Convert 14 bit 2's complement to 16 bit 2's complement
raw |= (1 << 15) | (1 << 14); // 2's complement extension
raw_signed = -(~raw + 1);
}
else {
raw_signed = raw;
}
uint16_t divisor;
if(range == FXLS8471QR1_FS_RANGE_2G) {
divisor = FS_DIV_2G;
}
else if(range == FXLS8471QR1_FS_RANGE_4G) {
divisor = FS_DIV_4G;
}
else {
divisor = FS_DIV_8G;
}
return ((int32_t)raw_signed …Run Code Online (Sandbox Code Playgroud) avr ×10
embedded ×4
c ×3
arduino ×2
assembly ×2
optimization ×2
atmel ×1
clang ×1
cryptography ×1
eeprom ×1
encryption ×1
htpc ×1
isr ×1
llvm ×1
llvm-clang ×1
memory ×1
msp430 ×1
signed ×1
usb ×1