Пт мар 24, 2017 07:14:22
ага. должен. но не подходит.WiseLord писал(а):А make должен любой абсолютно подходить.
Пт мар 24, 2017 11:41:18
Andrew88 писал(а):При попытке хоть что-то скомпилить, получаю ошибку:
int main (void)
{
return 0;
}
# avr-gcc -c -mmcu=atmega8 main.c
Andrew88 писал(а):
- Код:
avr-gcc -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
as: неизвестный ключ «-mmcu=avr4»
$ avr-gcc -v -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
Пт мар 24, 2017 15:12:53
viiv писал(а):1) Под этой фразой я понимаю попытку скомпилировать самый простой исходник, типа
---------- Build: Release in avr (compiler: GNU GCC Compiler for AVR)----------
avr-gcc -Wall -mmcu=atmega8 -DF_CPU=8000000UL -Os -I/usr/include -c fuse.c -o obj/Release/fuse.o
as: неизвестный ключ «-mmcu=avr4»
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
viiv писал(а):Добавьте в строку запуска gcc ключик вывода расширенной информации (-v) и сюда все что Вам в ответ "вывалилось"
~/Desktop2/fm7segm-master> make all
avr-gcc -v -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
Using built-in specs.
Reading specs from /opt/cross/lib/gcc/avr/5.4.0/device-specs/specs-atmega8
COLLECT_GCC=/opt/cross/bin/avr-gcc
Target: avr
Configured with: ../gcc-5.4.0/configure -v --target=avr --disable-nls --mandir=/opt/cross/share/man --infodir=/opt/cross/share/info --program-prefix=avr- --prefix=/opt/cross --with-gnu-ld --with-gnu-as --enable-languages=c,c++ --disable-libssp --with-dwarf2
Thread model: single
gcc version 5.4.0 (GCC)
COLLECT_GCC_OPTIONS='-v' '-g' '-Wall' '-Werror' '-Os' '-mcall-prologues' '-fshort-enums' '-ffunction-sections' '-fdata-sections' '-MMD' '-MP' '-MT' 'build/volume.o' '-MF' 'build/./volume.d' '-D' 'F_CPU=8000000' '-D' '_PIN1' '-D' '_TEA5767' '-D' '_RDA580X' '-D' '_TUX032' '-c' '-o' 'build/volume.o' '-specs=device-specs/specs-atmega8' '-mmcu=avr4'
/opt/cross/libexec/gcc/avr/5.4.0/cc1 -quiet -v -imultilib avr4 -MMD build/volume.d -MF build/./volume.d -MP -MT build/volume.o -D__AVR_ATmega8__ -D__AVR_DEVICE_NAME__=atmega8 -D F_CPU=8000000 -D _PIN1 -D _TEA5767 -D _RDA580X -D _TUX032 volume.c -mn-flash=1 -mno-skip-bug -quiet -dumpbase volume.c -mcall-prologues -mmcu=avr4 -auxbase-strip build/volume.o -g -Os -Wall -Werror -version -fshort-enums -ffunction-sections -fdata-sections -o /tmp/cc4A5zi6.s
GNU C11 (GCC) version 5.4.0 (avr)
compiled by GNU C version 4.8.3 20140627 [gcc-4_8-branch revision 212064], GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2
warning: GMP header version 5.1.3 differs from library version 5.1.2.
warning: MPC header version 1.0.2 differs from library version 1.0.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/sys-include"
#include "..." search starts here:
#include <...> search starts here:
/opt/cross/lib/gcc/avr/5.4.0/include
/opt/cross/lib/gcc/avr/5.4.0/include-fixed
/opt/cross/lib/gcc/avr/5.4.0/../../../../avr/include
End of search list.
GNU C11 (GCC) version 5.4.0 (avr)
compiled by GNU C version 4.8.3 20140627 [gcc-4_8-branch revision 212064], GMP version 5.1.3, MPFR version 3.1.2, MPC version 1.0.2
warning: GMP header version 5.1.3 differs from library version 5.1.2.
warning: MPC header version 1.0.2 differs from library version 1.0.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: 0968929aedc7da3ce3f041d621a0f017
COLLECT_GCC_OPTIONS='-v' '-g' '-Wall' '-Werror' '-Os' '-mcall-prologues' '-fshort-enums' '-ffunction-sections' '-fdata-sections' '-MMD' '-MP' '-MT' 'build/volume.o' '-MF' 'build/./volume.d' '-D' 'F_CPU=8000000' '-D' '_PIN1' '-D' '_TEA5767' '-D' '_RDA580X' '-D' '_TUX032' '-c' '-o' 'build/volume.o' '-specs=device-specs/specs-atmega8' '-mmcu=avr4'
as -v -mmcu=avr4 -mno-skip-bug -o build/volume.o /tmp/cc4A5zi6.s
GNU ассемблер, версия 2.28.0 (i586-suse-linux); используется BFD версии (GNU Binutils; devel:gcc / openSUSE_13.1) 2.28.0.20170308-270
as: неизвестный ключ «-mmcu=avr4»
make: *** [build/volume.o] Ошибка 1
WiseLord писал(а):Ругается на отсутствующий avr4. У меня в Gentoo это /usr/avr/lib/avr4/ (тут и для atmega8 объектный файл лежит). Но принадлежит это не пакету avr-gcc, а avr-libc. Убедитесь, что эта библиотека тоже установлена.
Пт мар 24, 2017 17:54:41
Andrew88 писал(а):Добавил, вот:
avr-gcc -v -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
as -v -mmcu=avr4 -mno-skip-bug -o build/volume.o /tmp/cc4A5zi6.s
GNU ассемблер, версия 2.28.0 (i586-suse-linux); используется BFD версии (GNU Binutils; devel:gcc / openSUSE_13.1) 2.28.0.20170308-270
as: неизвестный ключ «-mmcu=avr4»
Пт мар 24, 2017 18:07:51
viiv писал(а):Ну Вы и упорный Зачем make? Чтобы думать, что он там наставил в переменных окружения? Трудно в командную строку скопировать
- Код:
avr-gcc -v -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
viiv писал(а):Как временная мера - попробуйте, путь в котором лежат бинарники для avr указать самым первым в переменной PATH (чтобы avr-овский as находился раньше, чем as-хоста (обычно лежит /usr/bin)). По хорошему - надо собрать gcc чтобы вызывался свой-родной кросс-ассемблер (с полным путем).
Пт мар 24, 2017 18:13:08
Сб мар 25, 2017 05:54:54
Сб мар 25, 2017 08:24:04
Сб мар 25, 2017 10:10:14
CC = avr-gcc -B /usr/avr/bin/
Сб мар 25, 2017 10:12:45
Сб мар 25, 2017 11:28:07
Сб апр 08, 2017 22:25:44
Сб апр 08, 2017 22:47:44
hosturik писал(а):---- main.h
- Код:
#ifndef MAIN_H
#define MAIN_H
extern int isTheWorldOnFire;
#endif
---- main.c
- Код:
int isTheWorldOnFire = 0;
int main(int /*argc*/, char** /*argv*/) {
forkTrumpAITask();
while (!isTheWorldOnFire)
drinkYetAnotherBottleOfBeerHandler();
abort();
return 34782567453; /* es ist shon egal, kein Schwein kann diese Zeile erreichen */
}
---- tmp.c
- Код:
void redButtonHandler() {
if (!isTheWorldOnFire) {
for (int i = 0; i < 59; i++)
startYetAnotherTomahawk(i);
isTheWorldOnFire = 1;
}
}
Вс апр 09, 2017 00:56:37
///////////////////
main.h
///////////////////
#ifndef MAIN_H
#define MAIN_H
//глобальные переменные
extern volatile unsigned char power;
#endif
///////////////////
main.c
///////////////////
#include "main.h"
volatile unsigned char power = 0;
int main( void )
{
while(1)
{
abc(аргумент 1, аргумент 2);
power // какое то действие
}
}
//////////////////
menu.h
///////////////////
#ifndef MAIN_H
#define MAIN_H
прототип функции
void abc(unsigned long int a, unsigned char b);
#endif
//////////////////////
menu.c
//////////////////////
#include "menu.h"
void abc(unsigned long int a, unsigned char b)
{
//какой-то код
if(!power)
{
//что-то делаем
power = 1;
}
}
Вс апр 09, 2017 04:09:33
Нет. Поскольку каждый .c файл компилируется отдельно, то при таком подходе в каждом полученном .o файле будет копия этой переменной. А уже потом линкер при совмещении .o файлов в .elf выдаст ошибку "multiple definition". И трюк с #ifndef MAIN_H / #define MAIN_H / #endif тут не поможет.hosturik писал(а):у меня в файле main.h есть глобальные переменные, которые используются в нескольких сишных файлах и поэтому я подключаю этот main.h в этих файлах. Вроде же это логично?
Живой пример из одного моего проекта. Переменная tuner для доступа к параметрам тюнера определена в tuner.c и объявлена в tuner.h с модификатором extern. Любой другой файл просто её использует.hosturik писал(а):А пока покопаюсь в чужих исходниках, может докопаюсь до истины.
static Tuner_type tuner;
Tuner_type getTuner(void)
{
return tuner;
}
Tuner_type getTuner(void);
Tuner_type tuner = getTuner();
Вс апр 09, 2017 08:28:50
hosturik писал(а):[...] и эта переменная будет видна во всех си файлах и при этом заголовочный файл не нужно включать в сишные файлы?
Вс апр 09, 2017 10:33:09
Чт июн 29, 2017 14:39:04
#include <avr/io.h> //Подключаем библиотеку AVR
#include <avr/iotn2313.h> //Подключаем библиотеку ATtiny2313
#include <avr/interrupt.h> //Подключаем библиотеку прерываний
//Глобальные переменные сюда:
unsigned char reg=0; //Переменная reg - режим
//Обработка прерывания по спаду напряжения на INT0
ISR(INT0_vect)
{
reg++; //при нажатии на кнопку Увеличиваем значение переменной reg на 1
if (reg==4) reg=0; //Если досчитали до 4, то reg=0
}
void INTinit()
{
GIMSK=(1<<6); //Разрешаем прерывание INT0
MCUCR=(1<<0)|(1<<1); //Прерывыание по ниспадающему форонту (с 1 на 0); ISC01=1, ISC00=1
}
int main (void)
{
DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7); //Порт В на ВЫХод
PORTD=(1<<2); //Порт PD2 Подтягивающий резистор ВКлючен
INTinit(); // вызываем функцию инициализации прерываний
sei(); //Глобальное разрешение прерываний
while (1)
{
if (reg==1) PORTB=(1<<0); //Если reg досчитал до 1, то на ножке PD2 выставляем высокий уровень
};
}
Чт июн 29, 2017 14:45:43
Чт июн 29, 2017 15:09:33