我刚用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?
我使用的是avr-8位MCU.它的RAM大小为2K.我必须声明并使用大小为[16] [256]的int变量.这台机器上的int是2个字节.该阵列将消耗2*16*256 = 8k.这个尺寸是不可接受的,因为我只有2K RAM.
我必须使用这个二维数组来存储正在写入的闪存页面的状态.此数组将采用1或0值.1表示写入闪存中的页面,0表示不写入闪存中的页面.
我正在寻找如何存储此状态的解决方案.不确定位字段是否有用.
我使用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 代码中使用 AVR 库;我想使用 C 中的指针通过它们的地址专门访问寄存器。我在网上到处搜索,查看 AVR 头文件,并阅读一本书。如果有人可以帮助我,那就太好了。
该线定义了avr微控制器中DDRD寄存器的地址
#define myDDRD *((volatile unsigned char* const) 0x31)
Run Code Online (Sandbox Code Playgroud)
你能澄清一下如何在上面的行中使用指针吗?为什么我们需要第一个星号?不应该第二个足以指向地址0x31?
我知道这很接近于"愚蠢问题"类别,但我一直在研究如何在AVR 8-bit上启动加载后执行机器代码,并且已经了解到AVR 8上使用的哈佛架构 - 位MCU使得无法从闪存以外的任何地方执行代码.那么如何使用内联asm在运行时引入新的可执行代码呢?
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) 我遇到的问题是
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 指出如何正确回应回复