Добрый день.
Решил тут, было, сопрягнуть две этих программулины и поморгать светодиодом...
Нашел два почти идентичных примера в сети. Поставил проги, сделал проект в студии, прописал в его свойствах путь до папки с WinAVR'овскими хидерами...
Примеры (привожу только различия, все остальное одинаковое):
1-й:
void main(void)
{
/* enable PD5 as output */
sbi(DDRD,PD5);
while (1) {
/* led on, pin=0 */
cbi(PORTD,PD5);
delay_ms(500);
/* set output to 5V, LED off */
sbi(PORTD,PD5);
delay_ms(500);
}
}
2-й:
void main(void)
{
DDRD |= _BV(PD5); // Установить линию 5 порта D в "1" т.е. на вывод
while(1) { // Бесконечный цикл
PORTD &= ~_BV(PD5); // Сбросить бит PD5 в "0" = 0V, светодиод включен
delay_ms(500); // Ждем 0.5 сек.
PORTD |= _BV(PD5); // Установить бит PD5 в "1" = 5V, светодиод выключен
delay_ms(500); // Ждем 0.5 сек.
}
}
Теперь самое интересное. 2-й и компиляется и билдится и даже моргает в Протеусе. 1-й компиляется, но на билде отваливается с ошибками типа '../test.c:31: undefined reference to 'sbi' '
Т.е. понятно, что он не понимает что такое 'sbi' и 'cbi'... А побороть-та как?

Что-то подсказывает, что нужно добавить что-то типа
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
Но в 1-м примере про это нифига не сказано... более того, в исходнике этого нету, что наводит на мысль, что они сумели как-то обойтись без дефайнов... Так как?

Попутно, при попытке отдебажить работающий код в студии та вылетает :// Девайс выставлен AVR Simulator + камень AT90S4433. Что-то не так делаю?