Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Прописал в начале программы адрес указателя стека (RAMEND), заработало и step out и step over.
В отладчике этот адрес по умолчанию 0, и такое, конечно, работать не будет..

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Привет Всем! Раньше программировал на ардуино Но решил пересесть на avr studio и язык С. Поставил avr studio 7, МК 328р 16Мгц. Решил начать с простого примера Blink но он не заработал. 

#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/delay.h> 
int main(void)
{
    DDRB |=(1<<0);
    while(1)
    {
        PORTB|=(1<<0);
        _delay_ms(1000);
        PORTB &= ~(1<<0);
        _delay_ms(1000);
    }
}

При выставлении оптимизации "О1" В симуляторе выполнение останавливается на строчке PORTB &= ~(1<<0); На МК светодиод горит постоянною

При выставлении оптимизации "О0" В симулятор переходит в файлы delay и показывает какие строчки выполняет там. (Как это отменить?). На МК светодиод очень часто моргает в полнакала. 

Собственно у меня 2 вопроса.

1) Что я делаю не так в этом примере?

2) Мне не понятна запись по работе с портами. Так как можно записать так DDRB |=(1<<0); а можно так DDRB =(1<<PB0); (При этом PB0 подчеркнут красным но в симуляторе эта запись отрабатывает). Видел много примеров с различными записями в порт и до сих пор не понял как правильно записывать? 

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

самое простое - посмотреть ассемблерный файл, который оно сгенерировало. Файл .lss, возможно (после AVRStudio 4 могли поменять). На первый взгляд ошибок в коде не видно.

PB0 - константа, определенная где-то в iom328.h и подобных и равная нулю, так что записи (1<<0) и (1<<PB0) равнозначны.

запись |= в отличие от = меняет не все биты (см. логические операции).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Файл .lss 

Скрытый текст

GccApplication1.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000000  00800100  00800100  000000e0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         0000008c  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .comment      00000030  00000000  00000000  000000e0  2**0
                  CONTENTS, READONLY
  3 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000110  2**2
                  CONTENTS, READONLY
  4 .debug_aranges 00000020  00000000  00000000  00000150  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   000006cc  00000000  00000000  00000170  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 00000638  00000000  00000000  0000083c  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   0000024c  00000000  00000000  00000e74  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  00000024  00000000  00000000  000010c0  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    00000384  00000000  00000000  000010e4  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_ranges 00000010  00000000  00000000  00001468  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:    0c 94 34 00     jmp    0x68    ; 0x68 <__ctors_end>
   4:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
   8:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
   c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  10:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  14:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  18:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  1c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  20:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  24:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  28:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  2c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  30:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  34:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  38:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  3c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  40:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  44:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  48:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  4c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  50:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  54:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  58:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  5c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  60:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  64:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>

00000068 <__ctors_end>:
  68:    11 24           eor    r1, r1
  6a:    1f be           out    0x3f, r1    ; 63
  6c:    cf ef           ldi    r28, 0xFF    ; 255
  6e:    d8 e0           ldi    r29, 0x08    ; 8
  70:    de bf           out    0x3e, r29    ; 62
  72:    cd bf           out    0x3d, r28    ; 61
  74:    0e 94 40 00     call    0x80    ; 0x80 <main>
  78:    0c 94 44 00     jmp    0x88    ; 0x88 <_exit>

0000007c <__bad_interrupt>:
  7c:    0c 94 00 00     jmp    0    ; 0x0 <__vectors>

00000080 <main>:
#define F_CPU 16000000UL
#include <avr/io.h>
#include <avr/delay.h> 
int main(void)
{
    DDRB |=(1<<0);
  80:    20 9a           sbi    0x04, 0    ; 4
    while(1)
    {
        PORTB |=(1<<0);
  82:    28 9a           sbi    0x05, 0    ; 5
        _delay_ms(1000);
        PORTB &= ~(1<<0);
  84:    28 98           cbi    0x05, 0    ; 5
  86:    fd cf           rjmp    .-6          ; 0x82 <main+0x2>

00000088 <_exit>:
  88:    f8 94           cli

0000008a <__stop_program>:
  8a:    ff cf           rjmp    .-2          ; 0x8a <__stop_program>

Ассемблер я не знаю. 

Изменено пользователем LEVV2006
Ссылка на комментарий
Поделиться на другие сайты

Напиши для начала вместо дикой конструкции "PORTB &= ~(1<<0)" (за что не люблю С так то что неочевидно и тяжело разворачивать эти логические конструкции) конструкцию попроще - PORTB = 0

На ассемблере как-то попроще - указываешь какой бит установить и в какое значение и делов.

Во вторых, посмотри порт осциллографом, может там есть что-то но очень быстро.

К контроллеру вообще подключен кварцевый резонатор? А его режим работы выбран верно? И вообще тактирование переключено на внешний резонатор? По умолчанию-то у него выставлено тактирование от внутреннего генератора и составляет приблизительно 1Мгц, с твоим кодом светодиод будет мигать с периодом в 32 секунды - 16 секунд горит, 16 не горит.

Для ещё большей наглядности, включи весь порт на вывод и выводи туда простой счетчик и задержку замени на 10мс - при этом старший разряд порта будет переключаться с периодом в 5 секунд при номинальной частоте а младший - 50Гц.

 

Ааааахахах... я валяюсь с компилятора! КУДА ОН ДЕЛ ВТОРОЙ ВЫЗОВ _delay_ms(1000)!!! Там что получается... порт выставляется в 1 ждёт 1000мс как положено, переключает в ноль и сразу же переходит к началу цикла где он мгновенно снова ставит 1 и ждет 1000мс... короче, он у тебя мигает но отключается вместо 1 секунды на пару микросекунд!

Пожалуй, всё-таки посоветую изучить ассемблер, без него никак. Знать нужно, программировать на нём - по желанию.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

А где там первый делей тогда?

Цитата

82:    28 9a           sbi    0x05, 0    ; 5
        _delay_ms(1000);
        PORTB &= ~(1<<0);
  84:    28 98           cbi    0x05, 0    ; 5
  86:    fd cf           rjmp    .-6          ; 0x82 <main+0x2>

Что-то не так с оптимизацией, наверное. Еще компилятор должен был ругнуться на <avr/delay.h> вместо <util/delay.h>. Странно что ТС не обратил на это внимания.

Ну и на счет ассемблера полностью соглашусь - учить его обязательно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Хм... и правда, но первый компилятор хотябы написал в выводе а код собственно не вставил, тогда получается всё ещё хуже - светодиод мигает, но с частотой в 1..2Мгц. что легко проверяется подключением светодиода напрямую к питанию - он загорится раза в два ярче чем подключенный к выводу.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Для проверки достаточно в делеях указать разное время. В первом 1000 во втором 900 и тогда никакая оптимизация не выкинет код

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Я уж и не знаю что делать.

Вот код    оптимизация О1

#define F_CPU 16000000L
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB = 0xFF;
    PORTB = 0x00;
    while(1)
    {
        PORTB |= (1<<(PORTB0));
        _delay_ms(1000);
        PORTB &= ~(1<<(PORTB0));
        _delay_ms(900);
    }
}

Вот Файл .lss 

Скрытый текст


blink.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000000  00800100  00800100  000000e4  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         00000090  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .comment      00000030  00000000  00000000  000000e4  2**0
                  CONTENTS, READONLY
  3 .note.gnu.avr.deviceinfo 00000040  00000000  00000000  00000114  2**2
                  CONTENTS, READONLY
  4 .debug_aranges 00000020  00000000  00000000  00000154  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   000006cc  00000000  00000000  00000174  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 00000638  00000000  00000000  00000840  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   00000252  00000000  00000000  00000e78  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  00000024  00000000  00000000  000010cc  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    0000035d  00000000  00000000  000010f0  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_ranges 00000010  00000000  00000000  0000144d  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:    0c 94 34 00     jmp    0x68    ; 0x68 <__ctors_end>
   4:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
   8:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
   c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  10:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  14:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  18:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  1c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  20:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  24:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  28:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  2c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  30:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  34:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  38:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  3c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  40:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  44:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  48:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  4c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  50:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  54:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  58:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  5c:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  60:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>
  64:    0c 94 3e 00     jmp    0x7c    ; 0x7c <__bad_interrupt>

00000068 <__ctors_end>:
  68:    11 24           eor    r1, r1
  6a:    1f be           out    0x3f, r1    ; 63
  6c:    cf ef           ldi    r28, 0xFF    ; 255
  6e:    d8 e0           ldi    r29, 0x08    ; 8
  70:    de bf           out    0x3e, r29    ; 62
  72:    cd bf           out    0x3d, r28    ; 61
  74:    0e 94 40 00     call    0x80    ; 0x80 <main>
  78:    0c 94 46 00     jmp    0x8c    ; 0x8c <_exit>

0000007c <__bad_interrupt>:
  7c:    0c 94 00 00     jmp    0    ; 0x0 <__vectors>

00000080 <main>:
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRB = 0xFF;
  80:    8f ef           ldi    r24, 0xFF    ; 255
  82:    84 b9           out    0x04, r24    ; 4
    PORTB = 0x00;
  84:    15 b8           out    0x05, r1    ; 5
    while(1)
    {
        PORTB |= (1<<(PORTB0));
  86:    28 9a           sbi    0x05, 0    ; 5
        _delay_ms(1000);
        PORTB &= ~(1<<(PORTB0));
  88:    28 98           cbi    0x05, 0    ; 5
  8a:    fd cf           rjmp    .-6          ; 0x86 <main+0x6>

0000008c <_exit>:
  8c:    f8 94           cli

0000008e <__stop_program>:
  8e:    ff cf           rjmp    .-2          ; 0x8e <__stop_program>
 

Кварц подключил на 16 МГц. Фьюзы остались от ардуино. Low 0xFF High 0xDA. Залил прошивку как есть. Светодиод горит постоянно. Подключил частотомер и он показал частоту мерцания 2,665 МГц

Я не пойму почему компилятор так так плохо работает с библиотекой delay.h? Пересмотрел целую кучу примеров и статей. У всех все просто, набил код как у меня и все заработало.... Да как так то?

По вопросу о <avr/delay.h> вместо <util/delay.h>. Видел в примерах оба этих написания. Не один из них корректно не работает.

Только что попробовал с оптимизацией О0 и задержкой (delay 1000) и (delay 900). Все заработало! Выставил задержку (delay 1000) и (delay 1000). Работает! Вернул оптимизацию О1 и опять не заработало. 

Самое странное то что я раньше пробовал ставить оптимизацию О0 и задержкой (delay 1000) и (delay 1000) но не работало. Как будто (delay 900) дал пинок компилятору. 

Я вот думаю может надо какую ни будь настройку отключить...

Ссылка на комментарий
Поделиться на другие сайты

Оптимизатор "соптимизировал" бесполезную растрату ресурсов - задержка ведь ничего полезного не делает и результат "прокрутки" нигде больше не используется - вот компилятор кусок кода и выбросил. Вообще странно начинать осваивать с опцией оптимизации... там столько подводных камней!

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

А разница?

PORTB0=PINB0=PB0=(и т.д. и т.п)=0 это есть константа:

В 22.11.2016 в 21:02, COKPOWEHEU сказал:

PB0 - константа, определенная где-то в iom328.h и подобных и равная нулю

#define PORTB0 0

 

Ссылка на комментарий
Поделиться на другие сайты

Я как то пробовал РВ0 писать , так студия у меня почему то ругалась , принимала только PINB0 ,   я тоже заглядывал в iotn13a.h  дефайна  PB0 там нет . Сейчас посмотрел PORTB0 есть , но я после РВ0 больше не заморачивался с названием битов , меня PINBx вполне устраивал и устраивает .  Поэтому я и посчитал эту запись не верной .

Ссылка на комментарий
Поделиться на другие сайты

8 часов назад, Alexeyslav сказал:

 Вообще странно начинать осваивать с опцией оптимизации... там столько подводных камней!

А я и не начинал её осваивать!! По умолчанию стоит О1. И во всех примерах которые я встречал её не трогают. Но у меня не заработало с первого раза. Вот и начал смотреть почему.

 

6 часов назад, DmitryS сказал:

Надо вот так написать

Как я только не писал! Я и полностью порт переключал.  PORTB |= 0xFF; Но результат был тот же. 

Ссылка на комментарий
Поделиться на другие сайты

А чем вам так понравилось -O1? Вроде обычно используются -Os либо, для отладки, -O0. Некоторые компиляторы умеют -Ofast.

Ручная компиляция дает тот же результат?

avr-gcc -o firmware.elf main.c -mmcu=atmega328 -DF_CPU=16000000UL -Wall -O1

avr-objdump -S firmware.elf > firmware.lss

Еще было бы интересно глянуть версию компилятора - avr-gcc -v

7 часов назад, DmitryS сказал:

Надо вот так написать

   PORTB |= (1<<PINB0);
   _delay_ms(1000);
   PORTB &= ~(1<<PINB0);
   _delay_ms(900)

Я всегда писал PORTB |= (1<<0); и т.п. И нагляднее и запись короче. В последнее время постепенно перехожу на макросы вроде PORT_1(LED), PORT_0(LED) и т.д. Это еще более наглядно и переносимо.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, COKPOWEHEU сказал:

Я всегда писал PORTB |= (1<<0); и т.п. И нагляднее и запись короче.

Я , поначалу , тоже так писал , но надо заметить . что и не без вашего участия , стал писать имена пинов-битов . И надо сказать мне самому это нравится , и как чайнику в программировании на Си очень даже помогает в запоминании и понимании всех этих конструкций .

Ссылка на комментарий
Поделиться на другие сайты

Не нужно на кого-то надеятся, что он правильно скажет, для этого есть даташиты.

PORTx и PINx совершенно разные регистры, и самое интересное, что не всегда реально показывающие, что в это время на ножке процессора.

2222.PNG

Ссылка на комментарий
Поделиться на другие сайты

@Alex в студии 6 родные библиотеки стали позволять это кощунство. что нельзя сказать о студии 4

и после этого всех понесло, записывают туда все что хотят. 

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Цитата

PINx - регистр чтения порта.
Кто, где и когда сделал его для записи ?

ATMEL и сделала. Только в более новых ревизиях контроллеров с индексами P, PA и т.д. а в старых функция не работает. А вообще в железном контроллере никто не запретить писать в любой регистр, другое дело что ничего не произойдёт или прочитаешь мусор из несуществующего регистра.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Расскажу что обнаружил.

1) Кажет МК у меня то ли не правильно настроен то ли испортился. Поставил другой (atmega8) и все заработало как часы.

2) avr studio 7 правильно компилирует только с отключенной оптимизацией.  Размер прошивки Blink получается 1104 байта.

3) В arduino ide тот же Blink на языке wiring весит 728 байт

4) Если в arduino ide написать Blink на языке С. (Собственно я просто скопировал код из avr studio) то он весит 104 байта!!!!!!!!!!!!

Это победа!!! avr studio 7-"на шаг позади" :) В общем буду писать в arduino ide на языке С и сразу лить прошивку в МК. Жаль что нет отладчика.

Ссылка на комментарий
Поделиться на другие сайты

Этот код avr-gcc версии 4.9.2 с оптимизацией (любой, -O1, -O2, -O3, -Os, -Ofast) дает 108 байт. Задержки, разумеется, не выкидывает. Без оптимизации 1104 байта, но ругается что не гарантирует точности задержек.

Если не умеете пользоваться инструментом, не спешите его обсирать.

В ардуино (на самом деле нам вроде avr-g++) объем прошивки вырастает за счет кучи встроенных библиотек и "защит от дурака".

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Я никого не обсираю. Просто говорю о том что скаченная программа по не понятным на данный момент причинам не в состоянии работать в режимах -O1, -O2, -O3, -Os, -Ofast. Я у вас спрашивал: встречалась ли у кого ни будь такая проблема или есть ли какие ни будь дополнительные настройки по этой тема. Никто не ответил. Делаю вывод что что то криво встало но не выдает ошибок. Самое странно то что это уже было где то год назад на версии 6,2.

 И с другой стороны. Возьмём совершенно другую программу. Скачали-разархивировали (установочник не нужен) и она сразу работает! Что ещё надо для человека?. Да. Есть защита от дурака. Но как показала практика можно и на С писать не напрягаясь. И получишь те же объемы в прошивке. 

В общем чтобы устраивать срач. Программируем на том что удобно и корректно компилирует! 

Спасибо что помогли! Буду пробовать дальше писать программы. Может быть в дальнейшем мне удастся победить Студию.... Уж больно отладчик хорош:)

Ссылка на комментарий
Поделиться на другие сайты

У меня в студии стоит оптимизация Q1 .  По моему это вааще не влияет на компиляцию скетчей , размер кода получается один в один с Ардуиной aaaa1.jpgaaaa2.jpg

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...