Поиск по сайту

Результаты поиска по тегам 'gcc'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Категории и разделы

  • Вопрос-Ответ. Для начинающих
    • Песочница (Q&A)
    • Дайте схему!
    • Школьникам и студентам
    • Начинающим
    • Паяльник TV
    • Обсуждение материалов с сайта
  • Радиоэлектроника для профессионалов
    • Световые эффекты и LED
    • Роботы и модели на ДУ-управлении
    • Автоматика
    • Самодельные устройства к компьютеру
    • Программное обеспечение
    • Автомобильная электроника
    • Системы охраны и наблюдения. Личная безопасность
    • Питание
    • Электрика
    • Промышленная электроника
    • Ремонт
    • Металлоискатели
    • Измерительная техника
    • Мастерская радиолюбителя
    • Сотовая связь
    • Спутниковое ТВ
    • КВ и УКВ радиосвязь
    • Жучки
    • Телефония и фрикинг
    • Высокое напряжение
    • Идеи и технологии будущего
    • Справочная радиоэлементов
    • Литература
    • Разное
  • Аудио
    • FAQ, Технологии и компоненты
    • Для начинающих
    • Источники звука
    • Предусилители, темброблоки, фильтры
    • Питание аудио аппаратуры
    • Усилители мощности
    • Акустические системы
    • Авто-аудио
    • Ламповая техника
    • Гитарное оборудование
    • Прочее
  • Микроконтроллеры
    • МК для начинающих
    • AVR
    • PIC
    • STM32
    • Arduino и Raspberry Pi
    • ПЛИС
    • Другие микроконтроллеры и семейства
    • Алгоритмы
    • Программаторы и отладочные модули
    • Периферия и внешние устройства
    • Разное
  • Товары и услуги
    • Коммерческие предложения
    • Продам-Отдам, Услуги
    • Куплю
    • Уголок потребителя
    • Вакансии и разовая работа
    • Наши обзоры и тесты
  • Разное
    • Конкурсы сайта с призами
    • Сайт Паяльник и форум
    • Курилка
    • Технический английский (English)
    • Наши проекты для Android и Web
    • FAQ (Архив)
    • Личные блоги
    • Корзина
    • Вопросы с VK
  • ATX->ЛБП Переделки
  • Юмор в youtube Киловольты юмора
  • Надежность и группы продавцов Радиолюбительская доска объявлений exDIY
  • разные темы Переделки

Блоги

Нет результатов для отображения.

Нет результатов для отображения.

Местоположения

  • Пользователи форума

Группа


ICQ


Skype


Интересы


Город


Сфера радиоэлектроники


Оборудование

Найдено 5 результатов

  1. Как Подключить Файлы В Makefile?

    Добрый день, подскажите, есть директория с проектом и библиотеками структура директории /--------------------- main.c lib | |-------cmsis |-------mylib | |--------led | |-------- led.h |-------- led.c |-------STM32F4xx_StdPeriph_Driver build Makefile Как подключить папку led к линковщику // led.h #include <stdio.h> #include "stm32f4xx.h" void turnOn(); void turnOff(); // led.c #include "led.h" void turnOn() { GPIO_SetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); } void turnOff() { GPIO_ResetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); } // main.c #include <stdio.h> #include "stm32f4xx.h" #include "led.h" ... // init gpio ... extern void turnOn(); extern void turnOff(); ... // init sys clock ... int main(void) { setSysTick(); while(1) { //check the push button turnOn(); Delay(500); turnOff(); } return 0; } описание файла Makefile для линковщика и компилятора # Makefile # STM32F4-Discovery Makefile for Mac OSX SRCS=$(wildcard *.c) # Add assembly source files here or use $(wildcard *.s) for all .s files S_SRCS = CortexM4asmOps.s # Project name PROJ_NAME = test OUTPATH = build OUTPATH := $(abspath $(OUTPATH)) BASEDIR := $(abspath ./) MKDIR_P = mkdir -p ################################################### # Check for valid float argument # NOTE that you have to run make clan after # changing these as hardfloat and softfloat are not # binary compatible ifneq ($(FLOAT_TYPE), hard) ifneq ($(FLOAT_TYPE), soft) #override FLOAT_TYPE = hard override FLOAT_TYPE = soft endif endif ################################################### AS=$(BINPATH)arm-none-eabi-as CC=$(BINPATH)arm-none-eabi-gcc LD=$(BINPATH)arm-none-eabi-gcc OBJCOPY=$(BINPATH)arm-none-eabi-objcopy OBJDUMP=$(BINPATH)arm-none-eabi-objdump SIZE=$(BINPATH)arm-none-eabi-size LINKER_SCRIPT = stm32_flash.ld CPU = -mcpu=cortex-m4 -mthumb CFLAGS = $(CPU) -c -std=gnu99 -g -O2 -Wall LDFLAGS = $(CPU) -mlittle-endian -mthumb-interwork -nostartfiles -Wl,--gc-sections,-Map=$(OUTPATH)/$(PROJ_NAME).map,--cref --specs=nano.specs ifeq ($(FLOAT_TYPE), hard) CFLAGS += -fsingle-precision-constant -Wdouble-promotion CFLAGS += -mfpu=fpv4-sp-d16 -mfloat-abi=hard else CFLAGS += -msoft-float endif # Default to STM32F40_41xxx if no device is passed ifeq ($(DEVICE_DEF), ) DEVICE_DEF = STM32F40_41xxx endif CFLAGS += -D$(DEVICE_DEF) vpath %.a lib vpath %.c lib/mylib # Includes INCLUDE_PATHS = -I$(BASEDIR)/inc -I$(BASEDIR)/lib/cmsis/stm32f4xx -I$(BASEDIR)/lib/cmsis/include -I$(BASEDIR) INCLUDE_PATHS += -I$(BASEDIR)/lib/Conf INCLUDE_PATHS += -I$(BASEDIR)/lib/STM32F4xx_StdPeriph_Driver/inc INCLUDE_PATHS += -I$(BASEDIR)/mylib/im INCLUDE_PATHS += -I$(BASEDIR)/mylib/im/led # Library paths LIBPATHS = -L$(BASEDIR)/lib/STM32F4xx_StdPeriph_Driver # Libraries to link LIBS = -lstdperiph -lc -lgcc -lnosys OBJS = $(SRCS:.c=.o) OBJS += $(S_SRCS:.s=.o) ################################################### .PHONY: lib proj all: dir lib proj $(SIZE) $(OUTPATH)/$(PROJ_NAME).elf lib: $(MAKE) -C lib FLOAT_TYPE=$(FLOAT_TYPE) BINPATH=$(BINPATH) DEVICE_DEF=$(DEVICE_DEF) BASEDIR=$(BASEDIR) proj: $(OUTPATH)/$(PROJ_NAME).elf .s.o: $(AS) $(CPU) -o $(addprefix $(OUTPATH)/, $@) $< .c.o: $(CC) $(CFLAGS) -std=gnu99 $(INCLUDE_PATHS) -o $(addprefix $(OUTPATH)/, $@) $< $(OUTPATH)/$(PROJ_NAME).elf: $(OBJS) $(LD) $(LDFLAGS) -T$(LINKER_SCRIPT) $(LIBPATHS) -o $@ $(addprefix $(OUTPATH)/, $^) $(LIBS) $(LD_SYS_LIBS) $(OBJCOPY) -O ihex $(OUTPATH)/$(PROJ_NAME).elf $(OUTPATH)/$(PROJ_NAME).hex $(OBJCOPY) -O binary $(OUTPATH)/$(PROJ_NAME).elf $(OUTPATH)/$(PROJ_NAME).bin $(OBJDUMP) -S --disassemble $(OUTPATH)/$(PROJ_NAME).elf > $(OUTPATH)/$(PROJ_NAME).dis dir: $(MKDIR_P) $(OUTPATH) clean: rm -f $(OUTPATH)/*.o rm -f $(OUTPATH)/$(PROJ_NAME).elf rm -f $(OUTPATH)/$(PROJ_NAME).hex rm -f $(OUTPATH)/$(PROJ_NAME).bin rm -f $(OUTPATH)/$(PROJ_NAME).dis rm -f $(OUTPATH)/$(PROJ_NAME).map # Remove the following line if you don't want to clean the Libraries as well $(MAKE) clean -C lib flash: st-flash write build/$(PROJ_NAME).bin 0x08000000 компилирую библиотеки make lib make[1]: `mylib' is up to date. собираю бинарник make выдает ошибку build/main.o: In function `main': main.c:37: undefined reference to `turnOn' main.c:39: undefined reference to `turnOff' collect2: error: ld returned 1 exit status make: *** [build/test.elf] Error 1 Если файлы из lib/mylib/led перенести в корень (на уровень, что и main.c), тогда все собирается хорошо Пробовал также добавить SRCS=$(wildcard lib/mylib/led/*.c) ассемблер ругается что нет .o файла Assembler messages: Fatal error: can't create /lib/mylib/led/led.o: No such file or directory make: *** [lib/mylib/led/led.o] Error 1 пытаюсь скомпилировать .o файл gcc -g -o -c led.c не может подтянуть другие хедеры In file included from led.c:1: ./led.h:2:10: fatal error: 'stm32f4xx.h' file not found #include "stm32f4xx.h"
  2. Битовые Операции В Gcc

    Друзья! А можно ли как-то "красиво" осуществлять битовые операции в GCC? Например, я хочу что бы кнопочка на ножке RA7 отражалась на светодиод на ножке PB0. В рамках моих знаний надо писать как-то так: if( PINA & 0b10000000 ) PORTB |= 0x00000001; else PORTB &= 0x11111110; Это все не красиво ИМХО. А красиво было бы так: PORTB0 = PINA7; Велосипед уже изобретен? Спасибо!
  3. Добрый день, дорогие форумчане! Осваиваю UART, столкнулся с такой проблемой: глобальная переменная не видится в прерывании. Вот код: #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1) volatile unsigned char ccc='d'; //вот она ISR(USART_RXC_vect) { unsigned char temp; temp=UDR; //без этого прерывание встает ccc=temp; } inline void HrdInit(void) { PORTD=(1<<5|1<<4); DDRB=(1<<3|1<<4); PORTB=(1<<3|0<<4); } void uart_SendByte(unsigned char { while(!(UCSRA & (1<<UDRE))) ; UDR=b; } unsigned char uart_RecByte(void) { while(!(UCSRA&(1<<RXC))) ; return UDR; } void USART_init() { UBRRH=(unsigned char)(bauddivider>>8); UBRRL=(unsigned char)(bauddivider); UCSRA = 0; UCSRB = 1<<RXEN|1<<TXEN|1<<RXCIE|0<<TXCIE; UCSRC = 1<<UCSZ0|1<<UCSZ1; } void main() { USART_init(); HrdInit(); asm("SEI"); while(1) { if(!(PIND & (1<<4))) { uart_SendByte(ccc); } } В теории программа должна по получению байта записывать его в глобальную переменную и по нажатию кнопки выдавать в канал, но выдает она только то, что в нее занесли при инициализации (либо 0). Подобную тему на этом форуме уже находил, но ничего полезного там не нашел. Заранее спасибо
  4. Возникла небольшая пробемка с получением микроокнтроллером значения, получаемого с UART. В UART передается строка вида: F6, т.е. шестнадцатиричное значение. Т.е. получается 2 байта F и 6. В микроконтроллере, мне необходимо принять эти данные и получить переменную с шестнадцатиричным значением т.е. например int c = 0xF6; Данные я принял, получив массив char UD[2] = {'F','6'}, а как мне их теперь "склеить" и получить 0xF6 не сображу
  5. Друзья! Я написал коротенькую программку (ее код ниже), но компилятор (avr gcc) налабал больше 2K кода (у меня процессор ATTiny26, соответственно, программа уже не влезает. И это при том, что я еще не дошел до вычислений, которые там будут, и возможно, с плавающей точкой... Посмотрел дизассемблер - что-то там и правда много всего лишнего на мой взгляд. Мой код компилируется нормально, беда в том, что компилятор добавляет еще кучу каких-то кусков назначение которых мне вовсе не понятно. Вот названия непонятных кусков: __gtsf2, __ltsf2, __floatunsisf, __clzsi2, __pack_f, __unpack_f, __fpcmp_parts_f, __prologue_saves__, __epilogue_restores__ Компилятор в режиме Os (это вроде как скорость, но в этом режиме получается самый компактный код, в других режимах код еще больше). Что можно сделать? 1) Сменить компилятор? Мне вообще-то avr gcc что-то не очень нравится и по другим причинам. Если IAR поможет решить эти проблемы, то наверно я пересяду. 2) Что-то выкинуть из программы? Может я что-то не заметил и какие-то действия вызывают сложные мат.функции? 3) Что-то подкрутить в настройках компилятора? 4) Моя ставка на младший контроллер изначально была не правильной? 5) Еще что-нибудь? Спасибо! Ну и код, собственно: #include "avr/io.h" #include "avr/interrupt.h" #define fVCS(v) (255*v/5) // ïðåîáðàçîâàíèå VP (0...300Â) â äàííûå ÀÖÏ (0...255) #define VCSMAX fVCS(0.55) // ìàêñèìàëüíîå çíà÷åíèå VCS #define VCSNORM fVCS(0.48) // ðàáî÷åå çíà÷åíèå VCS #define fVP(v) ((unsigned)255*v/200/2.56) // ïðåîáðàçîâàíèå VCS (0...5Â) â äàííûå ÖÀÏ (0...255) #define VPSTART fVP(175) // ïîðîã çàïóñêà ïðåîáðàçîâàòåëÿ (175Â) #define VPSAVE fVP(170) // ïîðîã âûäà÷è ñèãíàëà SAVE (170Â) #define VPSTOP fVP(60) // ïîðîã âûäà÷è ñèãíàëà STOP(60Â) #define NS 8 // ÷èñëî èñïóëüîâ START ïðè âêëþ÷åíèè volatile unsigned char ADC_data=0;// äàííûå ÀÖÏ (0...255) volatile unsigned char DAC_data=0;// äàííûå, ïåðåäàâàåìûå â ÖÀÏ (0...255 = 0...5Â) volatile unsigned int VP; // íàïðÿæåíèå ????? â âîëüòàõ volatile unsigned int msec; // òàéìåð: óâåëè÷èâàåòñÿ íà 1 êàæäóþ ìèëëèñåêóíäó typedef struct { unsigned bit0:1; unsigned bit1:1; unsigned bit2:1; unsigned bit3:1; unsigned bit4:1; unsigned bit5:1; unsigned bit6:1; unsigned bit7:1; } BYTE_BITFIELD; #define ddra (*((volatile BYTE_BITFIELD*)(&DDRA ))) #define ddrb (*((volatile BYTE_BITFIELD*)(&DDRB ))) #define porta (*((volatile BYTE_BITFIELD*)(&PORTA))) #define portb (*((volatile BYTE_BITFIELD*)(&PORTB))) #define pina (*((volatile BYTE_BITFIELD*)(&PINA ))) #define pinb (*((volatile BYTE_BITFIELD*)(&PINB ))) #define SAVE porta.bit5 // îïòðîí çàïèñè ñîñòîÿíèÿ òåðìèíàëà #define LED_VPN porta.bit4 // îòëàäî÷íûé #define STOP porta.bit3 // ñèãíàë îñòàíîâà ïðåîáðàçîâàòåëÿ #define START porta.bit2 // ñèãíàë çàïóñêà ïðåîáðàçîâàòåëÿ #define DAC_SYNC portb.bit3 // óïðàâëåíèå ÖÀÏ (âûáîð) #define DAC_SCLK portb.bit2 // óïðàâëåíèå ÖÀÏ (ñèíõðîíèçàöèÿ) #define DAC_DIN portb.bit0 // óïðàâëåíèå ÖÀÏ (äàííûå) #define clrb_STOP STOP = 0 #define setb_STOP STOP = 1 #define clrb_START START = 0 #define setb_START START = 1 #define clrb_SAVE SAVE = 1 #define setb_SAVE SAVE = 0 #define clrb_EORLOCK ddrb.bit6=0// ïåðåâîä ñèãíàëà EORLOCK â ïàññèâíîå ñîñòîÿíèå (ïåðåêëþ÷åíèå â ðåæèì âõîäà) #define setb_EORLOCK portb.bit6=0; ddrb.bit6=0 // ïåðåâîä ñèãíàëà EORLOCK â àêòèâíîå ñîñòîÿíèå (ïåðåêëþ÷åíèå â ðåæèì âûõîäà ñ íóëåì) #define setb_ADSC ADCSR |= ( 1<<6 ) #define setb_I SREG != ( 1<<7 ) #define clrb_I SREG &= ~( 1<<7 ) void delay_us( volatile signed int usec ) { usec -= 5; // 38 "ëèøíèõ" òàêòîâ, @8ÌÃö ïðèìåðíî 5 ìêñ. if( usec < 0 ) usec = 0; usec = usec >> 1; // 1 öèêë = 16 òàêòîâ, @8ÌÃö = 2 ìêñ. for( ; usec>0; usec-- ) { asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); } } void WriteDAC( unsigned char data ) { unsigned int data1 = data; data1 = data1 << 4; DAC_SYNC = 1; DAC_SCLK = 1; DAC_SYNC = 0; for( int i=0; i<16; i++ ) { (data1&0x8000) ? (DAC_DIN=1) : (DAC_DIN=0); data1 = data1<<1; DAC_SCLK = 0; DAC_SCLK = 1; } } int main( void ) { unsigned int i; DDRA = 0b01111100; DDRB = 0b00111101; WDTCR = 0b00001000; // 000=(reserved) // 0=Watchdog change disabled // 1=Watchdog enabled // 000=prescaler 1/16384 TCCR1A = 0b00000000; // 00=Comparator A disconected, // 00=Comparator B disconected, // 0=No Force Output Compare Match 1A // 0=No Force Output Compare Match 1B // 0=No PWM A // 0=No PWM B TCCR1B = 0b00000110; // 0=No Timer/Counter clear // 0=No prescaler reset // 00=(reserved) // 0110=PCS/32 TIMSK = 0b00000100; // 0=(reserved) // 0=TC1 A output compare int. disabled // 0=TC1 B output compare int. disabled // 00=(reserved) // 1=TC1 overflow interupt enabled // 0=TC0 overflow interupt disabled // 0=(reserved) ADMUX = 0b10100110; // 10=Internal Voltage Reference (2.56 V), AREF pin (PA3) not connected // 1=ADC Left Adjust Result // 00110=Input: ADC6 single ended ADCSR = 0b11000111; // 1=ADC Enabled // 1=Start conversion // 0=No free-running mode (single conversion) // 00=Clear interrupt flag,ADC interrupt disabled // 111=Confersion time CK/128 msec = 0; DAC_data = VCSMAX; setb_STOP; while( VP < VPSTART ) {} clrb_STOP; setb_EORLOCK; for( i=0; i<NS; i++ ) { delay_us( 300 ); setb_START; asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); asm( "nop" ); clrb_START; } clrb_EORLOCK; while( msec < 300 ) {} DAC_data = VCSNORM; while(1) { VP = ADC_data; if( VP < VPSAVE ) setb_SAVE; // åñëè VP ÷óòü ÷óòü ñíèçèëîñü - âûñòàâëÿåì SAVE if( VP > VPSTART ) clrb_SAVE; // åñëè VP âåðíóëîñü â íîðìó - ñíèìàåì SAVE if( VP < VPSTOP) // åñëè VP îïóñòèëîñü íèæå ìèíèìàëüíîãî, òî { clrb_I; // çàïðåùàåì âñå ïðåðûâàíèÿ while(1) {} // çàâèñàåì (÷òî áû ñðàáîòàë WDT è îáðåñåòèë êîíòðîëëåð) } } return 0; } ISR( TIMER1_OVF1_vect ) { asm( "wdr" ); TCNT1 = 0xFF - 250; msec++; WriteDAC( DAC_data ); if( ( ADCSR&(1<<6) ) == 0 ) ADC_data = ADCH; setb_ADSC; }