|
WinAvr бит установить?, Сбросить/установить бит. |
|
|
|
May 7 2005, 20:56
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 26-02-05
Пользователь №: 2 909

|
Подскажите плз. Что делаю не правильно. Взял пример кода здесь: http://www.ars.yet.ru/union/mk/mk06.htmlКод int main(void) { sbi (DDRD ,PD5); while (1) { cbi (PORTD,PD5); delay_ms(500); sbi (PORTD,PD5); delay_ms(500); } } Но при компиляции возникает ошибка , что делаю не правильно? Версия WinAVR - 20050214 Compiling: test.c avr-gcc -c -mmcu=at90s4433 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.lst -std=gnu99 -MD -MP -MF .dep/test.o.d test.c -o test.o test.c: In function `main': test.c:31: warning: implicit declaration of function `sbi' test.c:33: warning: implicit declaration of function `cbi' test.c:38:5: warning: no newline at end of file Linking: test.elf avr-gcc -mmcu=at90s4433 -I. -gstabs -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test.o -std=gnu99 -MD -MP -MF .dep/test.elf.d test.o --output test.elf -Wl,-Map=test.map,--cref -lm test.o(.text+0x2e): In function `main': test.c:31: undefined reference to `sbi' test.o(.text+0x38):test.c:33: undefined reference to `cbi' test.o(.text+0x48):test.c:35: undefined reference to `sbi' make: *** [test.elf] Error 1
|
|
|
|
|
 |
Ответов
|
May 8 2005, 07:48
|
Участник

Группа: Новичок
Сообщений: 18
Регистрация: 21-04-05
Пользователь №: 4 376

|
В WinAVR - 20050214 нет cbi и sbi О том что их небудет предупреждали уже давно.
#define bit_set(p,m) ((p) |= (m)) #define bit_clear(p,m) ((p) &= ~(m)) #define BIT(x) (0x01 << (x))
bit_set(PORTD,BIT(0)); bit_clear(PORTD, BIT(0));
|
|
|
|
|
May 8 2005, 18:40
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 26-02-05
Пользователь №: 2 909

|
GedasL, Спасибо, понял, всё работает.
|
|
|
|
|
May 9 2005, 10:28
|
Группа: Новичок
Сообщений: 4
Регистрация: 24-03-05
Пользователь №: 3 646

|
Цитата(UserM @ May 8 2005, 21:40) GedasL, Спасибо, понял, всё работает. Делай так: Код while (1) { //Бесконечный цикл PORTB |= 1<<2; //set PORTB.2 high delay_ms(500); // Ждем 0.5 сек. PORTB &= ~(1<<2); //set PORTB.2 low delay_ms(500); // Ждем 0.5 сек.
|
|
|
|
|
May 9 2005, 17:57
|
Участник

Группа: Участник
Сообщений: 49
Регистрация: 26-02-05
Пользователь №: 2 909

|
ViktorK, Спасибо! Понял.
Я наверно не прав , но по моему мнению запись:
cbi (PORTD,5); sbi (PORTD,5);
Была намного понятней, чем:
PORTD &= ~(1<<5); PORTD |= 1<<5;
|
|
|
|
|
May 9 2005, 18:31
|
Участник

Группа: Новичок
Сообщений: 18
Регистрация: 21-04-05
Пользователь №: 4 376

|
Цитата(UserM @ May 9 2005, 20:57) ViktorK, Спасибо! Понял. Я наверно не прав , но по моему мнению запись: cbi (PORTD,5); sbi (PORTD,5); Была намного понятней, чем: PORTD &= ~(1<<5); PORTD |= 1<<5; Но PORTD &= ~(1<<5); PORTD |= 1<<5; переносимо на любои компилятор
|
|
|
|
|
May 9 2005, 19:02
|
Участник

Группа: Свой
Сообщений: 41
Регистрация: 12-01-05
Из: St. Petersburg
Пользователь №: 1 917

|
Цитата(GedasL @ May 9 2005, 21:31) Цитата(UserM @ May 9 2005, 20:57) ViktorK, Спасибо! Понял. Я наверно не прав , но по моему мнению запись: cbi (PORTD,5); sbi (PORTD,5); Была намного понятней, чем: PORTD &= ~(1<<5); PORTD |= 1<<5; Но PORTD &= ~(1<<5); PORTD |= 1<<5; переносимо на любои компилятор Я,когда после IAR,пробовал писать на GCC написал себе хидер такого вида: Код /* ================================================================================ ============ Задаем структуру (битовое поле) чтобы иметь возможность обращаться к битам переменных. ================================================================================ ============ */ typedef struct _bit_struct { unsigned char Bit0:1, Bit1:1, Bit2:1, Bit3:1, Bit4:1, Bit5:1, Bit6:1, Bit7:1; }bit_field;
/* ================================================================================ ============ Определяем PORTB. ================================================================================ ============ */ #ifdef PORTB #define PORTB_Bit0 (*((volatile bit_field*) (0x38))).Bit0 #define PORTB_Bit1 (*((volatile bit_field*) (0x38))).Bit1 #define PORTB_Bit2 (*((volatile bit_field*) (0x38))).Bit2 #define PORTB_Bit3 (*((volatile bit_field*) (0x38))).Bit3 #define PORTB_Bit4 (*((volatile bit_field*) (0x38))).Bit4 #define PORTB_Bit5 (*((volatile bit_field*) (0x38))).Bit5 #define PORTB_Bit6 (*((volatile bit_field*) (0x38))).Bit6 #define PORTB_Bit7 (*((volatile bit_field*) (0x38))).Bit7 #define DDRB_Bit0 (*((volatile bit_field*) (0x37))).Bit0 #define DDRB_Bit1 (*((volatile bit_field*) (0x37))).Bit1 #define DDRB_Bit2 (*((volatile bit_field*) (0x37))).Bit2 #define DDRB_Bit3 (*((volatile bit_field*) (0x37))).Bit3 #define DDRB_Bit4 (*((volatile bit_field*) (0x37))).Bit4 #define DDRB_Bit5 (*((volatile bit_field*) (0x37))).Bit5 #define DDRB_Bit6 (*((volatile bit_field*) (0x37))).Bit6 #define DDRB_Bit7 (*((volatile bit_field*) (0x37))).Bit7 #define PINB_Bit0 (*((volatile bit_field*) (0x36))).Bit0 #define PINB_Bit1 (*((volatile bit_field*) (0x36))).Bit1 #define PINB_Bit2 (*((volatile bit_field*) (0x36))).Bit2 #define PINB_Bit3 (*((volatile bit_field*) (0x36))).Bit3 #define PINB_Bit4 (*((volatile bit_field*) (0x36))).Bit4 #define PINB_Bit5 (*((volatile bit_field*) (0x36))).Bit5 #define PINB_Bit6 (*((volatile bit_field*) (0x36))).Bit6 #define PINB_Bit7 (*((volatile bit_field*) (0x36))).Bit7
#endif Ну и так далее... Потом в программе можно писать "в стиле IAR" PORTB_Bit5 = 1; // Установить бит PORTB_Bit5 = 0; // Сбросить бит if (PORTB_Bit5) // Если бит != 0 Привык к IARу :-)
|
|
|
|
Сообщений в этой теме
UserM WinAvr бит установить? May 7 2005, 20:56 standpoint Хидеры для
undefined reference to `cbi'
u... May 8 2005, 04:25 UserM Добрый, день!
Подскажите плз. почему не прави... May 14 2005, 14:18 UserM Попробовал написать цикл for и тоже компилируется ... May 14 2005, 18:27 GedasL А какая тебе разнича. Тебе нужно 100 циклов вот к... May 14 2005, 19:15 UserM Цитата(GedasL @ May 14 2005, 21:15)А какая те... May 16 2005, 19:39 vet Цитатаunsigned short outer1;
Возможно, проблему ре... May 14 2005, 20:50 UserM Цитата(vet @ May 14 2005, 22:50)Цитатаunsigne... May 16 2005, 19:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|