У меня ATtiny25v, подключенный к SPI Raspberry Pi.
Я использую avr-gcc для компиляции своего кода. Затем я использую avrdude, чтобы загрузить его.
Но я сталкиваюсь с очень странным явлением: основная функция не вызывается, и вместо этого первые инструкции первой функции оказывают влияние на gpio ...
У меня есть светодиод, подключенный на portb4.
... Я пробовал с несколькими чипами одной и той же модели, и все они ведут себя одинаково (за исключением одного глючного)
... Может кто-нибудь объяснить это?
ПРИМЕЧАНИЕ:
Я опускаю детализацию, но ни компилятор (с -Wall -pedantic
), ни avrdude (с -v -v
) не выдают никакой ошибки.
и версия kcuzner, и предыдущая версия (исправлено linux_gpio http://savannah.nongnu.org/bugs/?47550) дают одинаковые результаты. kcuzner, использующий программатор linuxspi, ведет себя так же.
это:
#include <avr/io.h>
#include <avr/interrupt.h>
#define B(b) (1 << b)
void ledT(){
PORTB ^= B(PORTB4);
}
void led(uint8_t s){
if(s)
PORTB |= B(PORTB4);
else {
PORTB &= ~B(PORTB4);
}
}
int main(){
PORTB = 0;
DDRB = 0;
USISR = 0;
USIDR = 0;
while(1);
//return 0;
}
... загорается светодиод на старте.
#include <avr/io.h>
#include <avr/interrupt.h>
#define B(b) (1 << b)
void ledT(){
PORTB ^= B(PORTB3);
}
void led(uint8_t s){
if(s)
PORTB |= B(PORTB4);
else {
PORTB &= ~B(PORTB4);
}
}
int main(){
PORTB = 0;
DDRB = 0;
USISR = 0;
USIDR = 0;
while(1);
//return 0;
}
... не светится
и этот:
#include <avr/io.h>
#include <avr/interrupt.h>
#define B(b) (1 << b)
void ledT(){
PORTB ^= B(PORTB4);
PORTB ^= B(PORTB4);
}
void led(uint8_t s){
if(s)
PORTB |= B(PORTB4);
else {
PORTB &= ~B(PORTB4);
}
}
int main(){
PORTB = 0;
DDRB = 0;
USISR = 0;
USIDR = 0;
while(1);
//return 0;
}
... также не светится.
#include <avr/io.h>
#include <avr/interrupt.h>
#define B(b) (1 << b)
void ledT(){
PORTB = PORTB | B(PORTB3);
PORTB = PORTB | B(PORTB4);
}
void led(uint8_t s){
if(s)
PORTB |= B(PORTB4);
else {
PORTB &= ~B(PORTB4);
}
}
int main(){
PORTB = 0;
DDRB = 0;
USISR = 0;
USIDR = 0;
while(1);
//return 0;
}
... загорается светодиод