原装Atmel jtag程序员售价300美元.
http://www.atmel.com/dyn/products/tools_card_v2.asp?tool_id=3353
http://search.digikey.com/scripts/DkSearch/dksus.dll?site=us&lang=en&mpart=ATJTAGICE2
你推荐我哪个克隆?他们是100%克隆?(与avr工作室合作,同样的fw等)
谢谢.
avr-gcc程序中的main()函数将寄存器状态保存在堆栈中,但是当运行时调用它时,我理解在微控制器上没有任何东西可以返回.这是浪费RAM吗?如何防止这种状态储蓄?
我试图将char变量转换为Unsigned int.我的代码是
char spi(char data)
{
//Start transmision
SPDR = data;
//Wait for transmision complete
while(!(SPSR & 0x80));
return SPDR;
}
unsigned int ReadAd(void)
{
unsigned int data;
ChipSelectAd(1);
//Read data
CheckStatus();
spi(0x58);
data = (spi(0xFF)<< 8);
data |= spi(0xFF);
return data;
}
Run Code Online (Sandbox Code Playgroud)
实际上我的问题是spi函数返回一个8位字符,所以上面的代码将char变量左移8bits然后将它分配给一个16位变量,结果总是为0.为了实际将数据移到左边我需要首先将它们转换为16位类型的变量.我试过这样的
char spi(char data)
{
//Start transmision
SPDR = data;
//Wait for transmision complete
while(!(SPSR & 0x80));
return SPDR;
}
unsigned int ReadAd(void)
{
unsigned int data;
ChipSelectAd(1);
//Read data
CheckStatus();
spi(0x58);
data = (unsigned int)((unsigned char)spi(0xFF)<< …Run Code Online (Sandbox Code Playgroud) 当我尝试使用AVR studio 4调试一小段代码时出现此错误:
Build failed... No build tools defined.
Run Code Online (Sandbox Code Playgroud)
有人可以给我一些建议吗?
我在我的Linux机箱上测试了这个,它有gcc,编译得很好.
void myFunc(int* &input);
Run Code Online (Sandbox Code Playgroud)
编译没有错误.
在我的avr上,声明相同的功能:
void myFunc(int* &input);
Run Code Online (Sandbox Code Playgroud)
导致编译错误:
expected ';', ',' or ')' before '&' token
Run Code Online (Sandbox Code Playgroud)
linux上的gcc版本是4.6.3
avr(avr-gcc)的gcc版本是3.4.2
我曾读到,如果我从来没有从回main()圈,我可以抽出〜66个字节,而在一些编译器开关avr-gcc,但我无法再找到该网站。
这是针对嵌入式的:
main() {
while(1)
{
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud) 我对Atmel Studio 6.1中的ATMEGA328P编程有疑问.
将二进制文件分配给寄存器比进行移位操作更快吗?
如果我理解正确,但请更正此!!
让我们说:
DDRC = 0b11001100;
Run Code Online (Sandbox Code Playgroud)
我必须在进行按位操作之前检查初始位条件,然后才能将任何位置移位到位置?例如
DDRC |= (1<<DDRC0);
Run Code Online (Sandbox Code Playgroud)
我们得到:
11001100
10011001
Run Code Online (Sandbox Code Playgroud)
=
11011101
Run Code Online (Sandbox Code Playgroud)
这样对吗?如果我们知道一点点组合简单地写,也许它更快更简单?:
0b11001101
Run Code Online (Sandbox Code Playgroud) 当比较优势和劣势的CTC模式和普通模式的AVR定时器编程,你觉得哪一个更好?为什么?你能为我解释一下吗?
谢谢你的帮助.
所以我被分配了为AVR编译编写自定义reset()函数的任务.
我得到了这个信息 - "Atmega128和Pic24e在程序地址0x0处有复位中断.写一个函数reset()来复位程序.我也听说过强制系统重启的一种简单方法就是发送它进入无限循环.
叫我疯了,但这就像写作一样简单:
function reset(){
goto 0x00000000;
}
Run Code Online (Sandbox Code Playgroud)
不确定你是否可以这样做,而不是寻找复杂的解释,因为我很确定这是一个通用的问题.简短而甜蜜,如果你能:)
我已经编写了用于读取开关状态的代码,如果按下#是3次则退出.
void allkeypadTest(void)
{
static uint8_t modeKeyCount=0;
do
{
uint8_t key=getKeyStatus();
if(key)
{
if(key=='#')
{
modeKeyCount++;
//pulseIODevice(LED1,1,500,200);
}
else
{
pulseIODevice(LED1,key-0x30,500,200);
}
}
}while(modeKeyCount<3);
}
Run Code Online (Sandbox Code Playgroud)
但是一旦我输入#key一次,循环就会退出.如果按其他键,行为就可以了.但是,如果我pulseIODevice在if(key=='#')部分下取消注释,行为是正常的.pulseIODevice将在特定时间段内将LED切换一定时间并将PWM传递给它.我很困惑我的代码出了什么问题.请注意,如果未检测到任何键,getKeyStatus则返回'\0'(null)并返回1x4键盘键的ASCII值(ASCII值为3,6,9和#)