标签: avr-gcc

未找到符号 - 雪豹上的CUnit

我刚用MacPorts/DarwinPorts在Snow Leopard上安装了CUnit.安装很顺利,但是,在尝试运行单元测试时遇到错误:

dyld: Symbol not found: _acs_map
  Referenced from: /opt/local/lib/libcunit.1.dylib
  Expected in: flat namespace
 in /opt/local/lib/libcunit.1.dylib
Trace/BPT trap
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题,或者有没有人成功让CUnit以其他​​方式使用Snow Leopard?

macports cunit avr-gcc osx-snow-leopard

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

考虑到有限的RAM空间,如何在C中声明和使用大小为[16] [256]的二维int数组.

我使用的是avr-8位MCU.它的RAM大小为2K.我必须声明并使用大小为[16] [256]的int变量.这台机器上的int是2个字节.该阵列将消耗2*16*256 = 8k.这个尺寸是不可接受的,因为我只有2K RAM.

我必须使用这个二维数组来存储正在写入的闪存页面的状态.此数组将采用1或0值.1表示写入闪存中的页面,0表示不写入闪存中的页面.

我正在寻找如何存储此状态的解决方案.不确定位字段是否有用.

c avr bit-manipulation multidimensional-array avr-gcc

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

当闪烁其他人时,无法按住某些LED:ON:ON

我使用AVR作为微控制器,使用ATMEGA8作为处理器(在微控制器内部).具有微控制器的板有4个LED.我能够刻录程序并点亮LED.但我无法达到特定的目的.

L1 L2  L3 L4
Run Code Online (Sandbox Code Playgroud)

这些是4个LED.在第一轮中,每个LED在3秒的间隙后亮起.最后一个LED(L4)在第一轮之后保持点亮.当第三轮开始时,每个LED以3秒的间隙点亮,当L4也是L3时,L3保持点亮照明,它继续......直到L1.

L1 L2 L3 L4
         On
      On On
   On On On
On On On On
Run Code Online (Sandbox Code Playgroud)

但我无法做到这一点.因为我设置一个LED ON其他关闭.我甚至尝试添加一个小的时间间隔为10毫秒.我该怎么做呢 ?这就是我现在所拥有的:

    #include<avr/io.h>
    #include<util/delay.h>
    DDRB = 0xFF; // input
 //PORTB = 0xFF;

    // ob00011110 --> on all --> binary

    int i=0;

    while(i<1) {
      PORTB = 0b00010000; // first led on
      _delay_ms(3000);
      PORTB = 0b00001000; // second led on
      _delay_ms(3000);
      PORTB = 0b00000100; // third on
      _delay_ms(3000);
      PORTB = 0b00000010; // fourth on
      _delay_ms(3000);
      i += …
Run Code Online (Sandbox Code Playgroud)

c microcontroller avr atmega avr-gcc

0
推荐指数
1
解决办法
135
查看次数

用C访问AVR寄存器?

我最近一直在努力学习关于微控制器的所有知识。由于这是自学,所以我花了一些时间来了解这些东西在裸机上是如何工作的。长话短说,我不想在我的 C 代码中使用 AVR 库;我想使用 C 中的指针通过它们的地址专门访问寄存器。我网上到处搜索,查看 AVR 头文件,并阅读一本书。如果有人可以帮助我,那就太好了。

c pointers avr cpu-registers avr-gcc

0
推荐指数
1
解决办法
3960
查看次数

为什么使用2个指针指向atmega微控制器的寄存器地址?

该线定义了avr微控制器中DDRD寄存器的地址

#define myDDRD *((volatile unsigned char* const) 0x31)
Run Code Online (Sandbox Code Playgroud)

你能澄清一下如何在上面的行中使用指针吗?为什么我们需要第一个星号?不应该第二个足以指向地址0x31?

c pointers avr atmega avr-gcc

0
推荐指数
1
解决办法
140
查看次数

如何在AVR 8位上进行内联汇编?

我知道这很接近于"愚蠢问题"类别,但我一直在研究如何在AVR 8-bit上启动加载后执行机器代码,并且已经了解到AVR 8上使用的哈佛架构 - 位MCU使得无法从闪存以外的任何地方执行代码.那么如何使用内联asm在运行时引入新的可执行代码呢?

microcontroller assembly avr avr-gcc harvard-architecture

0
推荐指数
1
解决办法
161
查看次数

C macro compiler warnings

I've defined a macro, using input from a previous question I asked here. The macro is intended to either set, clear, or check a GPIO pins state. The macro works as expected however a problem shows up when compiling. I get compiler warnings anywhere it's used:

Warning right-hand operand of comma expression has no effect

when I use the macro like this:

#define ON  1
#define OFF 2
#define ENA 3
#define OUT_3(x) (x==ON) ? (PORTJ.OUTSET=PIN2_bm) : (x==OFF) ? …
Run Code Online (Sandbox Code Playgroud)

c avr avr-gcc

0
推荐指数
1
解决办法
128
查看次数

avr 中的一元运算符:未定义的行为?

我遇到的问题是

voltage = voltage*2/3; voltage *= 2/3;

给出了不同的结果。该变量正在 uint16_t8 位 AVR 微控制器上运行。 第一个语句给出了正确的结果,第二个语句始终返回 0

我的一些朋友告诉我,一般不应该使用一元运算符,这让我思考,因为我也使用诸如 PORTC &= ~(1 << csBit);. 对于编译,我使用 avr-gcc(如果这可以给您一个想法)。

在此先感谢您的帮助

编辑#1:

好的,我明白 = 不是一元运算符。根本区别还在于 '''=''' 从右侧开始,而 ''''*, /''' 从左侧开始。

我想对于uints,这两种说法都不正确,我必须写电压=(uint16_t)((float)电压*(float)2/3)

并感谢@Lundin 指出如何正确回应回复

c avr unary-operator avr-gcc 8-bit

0
推荐指数
1
解决办法
113
查看次数