AtmelStudio и ATTiny13A ошибка <'sleep_enable' undeclared>
- Войдите на сайт для отправки комментариев
Пт, 08/11/2019 - 20:38
С AVR и в частности Attiny13А имел дело всего один раз - год назад в режиме аврала приблизительно освоил, написал прошивку и выбросил из головы. Но теперь потребовалось слегка поправить код, а исходник почил в недрах умершего ssd. По скриншотам восстановил код, отправляю в билд, а он мне с улыбкой пишет
Error 'sleep_enable' undeclared (first use in this function)
При этом <avr/sleep.h> прикреплен, но смущает, что в нем дефайны только для ATMega, он что, хочет мне сказать, что за год attiny разучился спать?
AtmelStudio свежескачанный 7.0.2389
ошибки:
------ Build started: Project: saber_c, Configuration: Debug AVR ------ Build started. Project "saber_c.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Studio\7.0\Vs\Compiler.targets" from project "c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\saber_c.cproj" (target "Build" depends on it): Task "RunCompilerTask" Shell Utils Path C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils C:\Program Files (x86)\Atmel\Studio\7.0\shellUtils\make.exe all --jobs 2 --output-sync .././main.c: In function 'main': c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\main.c(78,4): error: 'sleep_enable' undeclared (first use in this function) sleep_enable; ^ c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\main.c(78,4): info: each undeclared identifier is reported only once for each function it appears in c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\main.c(79,4): error: 'sleep_cpu' undeclared (first use in this function) sleep_cpu; ^ c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\main.c(80,4): error: 'sleep_disable' undeclared (first use in this function) sleep_disable; ^ make: *** [main.o] Error 1 Building file: .././main.c Invoking: AVR/GNU C Compiler : 5.4.0 "C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe" -x c -funsigned-char -funsigned-bitfields -DDEBUG -I"C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\include" -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=attiny13a -B "C:\Program Files (x86)\Atmel\Studio\7.0\Packs\atmel\ATtiny_DFP\1.3.229\gcc\dev\attiny13a" -c -std=gnu99 -MD -MP -MF "main.d" -MT"main.d" -MT"main.o" -o "main.o" ".././main.c" c:\users\nikollor\Documents\Atmel Studio\7.0\saber_c\saber_c\Debug\Makefile(76,1): error: recipe for target 'main.o' failed Done executing task "RunCompilerTask" -- FAILED. Done building target "CoreBuild" in project "saber_c.cproj" -- FAILED. Done building project "saber_c.cproj" -- FAILED. Build FAILED. ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
Код:
#define F_CPU 1000000UL #include <avr/io.h> #include <avr/sleep.h> #include <util/delay.h> #include <avr/interrupt.h> #define RED (PORTB |= (1 << PB0)) #define RED_OFF (PORTB &= ~(1 << PB0)) #define GREEN (PORTB |= (1 << PB2)) #define GREEN_OFF (PORTB &= ~(1 << PB2)) #define BLUE (PORTB |= (1 << PB4)) #define BLUE_OFF (PORTB &= ~(1 << PB4)) #define WHITE (PORTB |= (1 << PB3)) #define WHITE_OFF (PORTB &= ~(1 << PB3)) #define ALL (PORTB |= ((1 << PB0)|(1 << PB2)|(1 << PB3)|(1 << PB4))) #define ALL_OFF (PORTB &= ~((1 << PB0)|(1 << PB2)|(1 << PB3)|(1 << PB4))) typedef unsigned char byte; unsigned int trig, count; unsigned short pushtime; ISR (PCINT0_vect) { while ((PINB & (1 << PB1)) == 0) { } } int main(void) { DDRB = 0b00011101; PORTB = 0b00000010; count = 0; /* Replace with your application code */ while (1) { switch (count) { case 0 : { ALL_OFF; break; } case 1 : { ALL_OFF; RED; break; } case 2 : { ALL_OFF; GREEN; break; } case 3 : { ALL_OFF; BLUE; break; } case 4 : { ALL_OFF; WHITE; break; } case 5 : { ALL_OFF; ALL; count = 0; break; } default: { count = 0; } } pushtime = 0; while ((PINB & (1 << PB1)) == 0) { pushtime++; _delay_ms(10); } if ((pushtime > 10) & (pushtime <= 150) ) { count++; } if (pushtime > 150) { GIMSK |= (1 << PCIE); PCMSK |= (1 << PB1); ALL_OFF; sei(); set_sleep_mode (SLEEP_MODE_PWR_DOWN); sleep_enable; sleep_cpu; sleep_disable; cli(); } _delay_ms(100); } }
Нет, он хочет Вам сказать, что за год Вы разучились программировать. Надо не sleep_enable, а sleep_enable().
И, кстати, раз уж Вы включили sleep.h, кто или что мешает просто в него посмотреть?
А что там в мэйкфайле на 76 строке ? Имею ввиду лог - 24ю строку
Евгений раньше ответил, но все равно интересно...
Строки 72,73,74
Упс. Опередили.
Имею ввиду лог - 24ю строку
А что там должно быть?
UPD. Оптимизатор переменную pushtime (а точнее строки 56,57) выбрасывает нафиг, а без оптимизации код не влезает.