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) выбрасывает нафиг, а без оптимизации код не влезает.