-
Постов
1 567 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Блоги
Сообщения, опубликованные Goodefine
-
-
Ему не до лампочки, gcc все правильно трактовал, в соответствии со стандартом. Да и вообще, сравнивать эти два компилятора нельзя, кодевижн заточен под начинающих и строго стандартов не придерживается, да и оптимизация там оставляет желать лучшего. Gcc же весьма серьезный и строгий компилятор с хорошей оптимизацией. Иару уступает конечно, но далеко не всегда, а иногда и превосходит.
0 -
А также то нестандартно, что он не привел переменные к плавающему типу ,а был обязан по стандарту, т.к. ему явно не сказали к чему приводить. И таких приколов там много
0 -
Да чего удивлятся, там куча волательных переменных приводящихся к плавающим, во всяких ифах и прочих. Для примера, если их закомментировать, то одна строчка
while( VP < VPSTART ) {}
дает 90% флэша. (Со 110 на 20);
а вариант
while( VP < (unsigned int)VPSTART ) {}
Занимает 1,3 % (21,3% с ней против 20 % вообще без этой строчки). Вопросы? А кодевижн это вообще нечто не стандартное, потому как считает знает тока его создатель
0 -
Компилятор сделал ровно то, о чем его просили. Вы применяете параметризованные макросы с плавающей точкой, а в коде пишете, например:
DAC_data = VCSNORM;
где переменная приводится к плавающему типу, к тому же объявлена с квалификатором volatile. Так что литералами тут и не пахнет.
0 -
Что за уровень оптимизации? У меня стоит Os - это оно?
И логи компилирования - это что? Какой-то файл?
Оно. А логи пишутся, например в Build Log вашей среды разработки, примерно в таком виде:
-------------- Build: Release in joy --------------- [ 50.0%] avr-gcc.exe -Wall -mmcu=atmega8 -DF_CPU=12000000UL -Os -g -mmcu=atmega8 -Wall -Wa,-ahl=listing.lst -c main.c -o obj\Release\main.o [100.0%] avr-g++.exe -o bin\Release\joy.elf obj\Release\main.o -mmcu=atmega8 -Wl,-Map=bin\Release\joy.elf.map,--cref -s Output size is 636.00 bytes [ 33.3%] Running project post-build steps [ 66.7%] avr-size --mcu=atmega8 --format=avr bin\Release\joy.elf AVR Memory Usage ---------------- Device: atmega8 Program: 338 bytes (4.1% Full) (.text + .data + .bootloader) Data: 9 bytes (0.9% Full) (.data + .bss + .noinit) [100.0%] avr-objcopy -O ihex -R .eeprom -R .eesafe bin\Release\joy.elf bin\Release\joy.elf.hex avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex bin\Release\joy.elf bin\Release\joy.elf.eep.hex Process terminated with status 0 (0 minutes, 0 seconds) 0 errors, 0 warnings
Ну а в чем дело уже написали...
0 -
Проверьте уровень оптимизации и приведите логи компилирования
0 -
Там все просто в принципе. Но из-за особенностей когда-то примененной среды AtmanAVR, получилось много лишних исходных файлов, часть которых можно было бы объединить в один. Можно собрать под Студией или Codeblock-ом с WinAvr. А с Кодевижном завязывайте, именно на этом проекте он зашился (только пятисимвольный) , один и тот же код при компиляции им не работал, WinAvr же справлялся отлично.
0 -
Когда то выкладывал, тахометр, 2313, динамическая индикация. Может чего полезного найдете...
0 -
МК, скорее всего, залочен. А читается просто мусор. Определить можно по локбитам, как вариант..
0 -
Подскажите, как сделать так...
Для чего? Для понтов? На видео отклонение стрелки это функциональный момент - идет калибровка шкалы, шаговый двигатель устанавливается в правильную позицию. А вам зачем это надо?
1 -
...вот дуратская мода пошла на них!
Не надо свое сугубо личное мнение возводить в ранг вселенской истины...
2 -
Маленькая такая поправочка )))
0 -
А если бы ваш шеф на юбилей захотел новенький бмв, вы бы отписались на автофоруме, с просьбой накидать простенький чертежик с инструкцией по сборке? Так вот, со строкой, в вашем случае, это примерно равнозначно, поскольку итог будет один и тот же - это банально недостижимо с вашим уровнем знаний и навыков. Выход только один - купить, ну или завернуть кое что в газету ему на ДР...
2 -
Да проблему то вы создали на ровном месте. Иногда нужно и даташит читать. Объясняю - регистр захвата физически состоит из двух регистров, которые надо считывать в определенном порядке: сначала младший, потом старший. Ваша запись:
val=ICR1H<<8|ICR1L;
не дает однозначного задания последовательности считывания регистров компилятору. Поэтому периодически (оптимизация) происходило считывание в неправильном порядке. В первом измерении байт терялся (256), а во втором он прибавлялся. Например, минимальный код:
/***************************************************** Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8,000000 MHz *****************************************************/ #include <mega16.h> #include <delay.h> #include <stdlib.h> #include <stdio.h> unsigned char ch[10]; volatile unsigned int val=0; volatile unsigned int last_val=0; volatile unsigned int buf=0; unsigned char fl_izm=0; // Timer1 input capture interrupt service routine interrupt [TIM1_CAPT] void timer1_capt_isr(void) { val=ICR1H<<8|ICR1L; buf=(val-last_val); last_val=val; fl_izm=1; } void main(void) { // Port D initialization PORTD=0xFF; DDRD=0x02; // Timer/Counter 1 initialization TCCR1B=0x02; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x20; // USART initialization UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x08; // Analog Comparator initialization ACSR=0x80; SFIOR=0x00; // Global enable interrupts #asm("sei") while (1) { if(fl_izm) { //#asm("cli") ltoa(buf,ch); //#asm("sei") puts(ch); putsf("\r\n"); fl_izm=0; } } }
Дает примерно такое:
250
8720
10256
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
9744
10256
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
9744
10256
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
9744
10256
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
9744
10256
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
Но стоит в обработчике однозначно указать последовательность считывания регистров:
// Timer1 input capture interrupt service routine interrupt [TIM1_CAPT] void timer1_capt_isr(void) { val=ICR1L; val|=(ICR1H<<8); buf=(val-last_val); last_val=val; fl_izm=1; }
И, вуаля:
9210
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
10000
Вот такие-вот грабельки ))) ...
1 -
А приложите ка проект, с моделью..
0 -
Это вся программа?
0 -
Организуйте программу правильно и все пройдет. Итоа, путсам и прочим не место в обработчике. Только val и флаг.. И предусмотрите некий аналог критических секций.
0 -
А сколько метров в 100 омах медной проволоки?
Примерно столько же, сколько ампер в розетке...
Ампер-единица измерения силы тока.
Вольт- единица измерения напряжения. Это две совершенно разные величины, так что ответа думаю нет.
Вы не из тех 10-и? )))
0 -
Осциллографом можно
0 -
Ну минут десять погонять на сварочнике можно ведь?! ))...
Хотите 10 минут, придется гонять на токах свыше 1,45. Опять таблицы. А гонять десять минут на 1.13 - смысла особого нет. Для достижения теплового равновесия, выключателям на такие токи, требуется порою больше часа. Учтите, что проверять надо с проводом определенного сечения (отъем тепла от биметалла), для 63А по памяти 16мм.кв., длиной не менее метра.
будет ли это абсолютно такие же 63 Ампера , что и в бытовой сети 220 В именно для теплового расцепителя ? Вроде нагревание в данном случае ни с чем кроме протекания самого тока / т.е. его "действия" / не связано...
Связано. Поскольку от формы тока зависит активное сопротивление биметалла (токи Фуко), соответственно и количество тепла рассеиваемого им. Локализация выделения также будет разной.
0 -
А ПВ сварочника хватит на час при токе 71А? Сомневаюсь... Если амперметр измеряет действующий ток, то этого достаточно. Некоторую поправку можно сделать (по эталонному выключателю) на высшие гармоники (если есть). Если ток постоянный - то учесть, что при 50Гц нагрев будет немного другим - из-за токов Фуко. Этот коэфф. можно вычислить практически. Он будет примерно одинаков для всех типов. По памяти могу сказать, что отличие существенное (десятки процентов). В любом случае, берете эталон, и экспериментально подбираете ток, при котором выключатель не срабатывает при 30 град в состоянии теплового равновесия. Можно термопару припаять к биметаллу и сравнивать нагрев при 50Гц и от сварочника. Возможностей несколько, но все они подразумевают наличие некоторого оборудования. Вы же, как я понял, хотите готовый ответ без изыскательских работ, увы, так не бывает.
0 -
1.13Iном в течении часа - срабатывать не должен. 1.45Iном - должен. При 30С. Можно также проверять по т.н. калибровочным таблицам. Смысл - нагружается определенным током, обычно от 1.45Iном до 2.5Iном. Смотрят на соответствие времени срабатывания (попадание в вилку) в зависимости от температуры окружающей среды. Главный плюс этого способа - экономия времени. Минусы тоже есть, не совсем очевидные, но есть. Проверка занимает пару минут. У производителя данные таблицы есть. Их можно и самому составить, но тут нужны определенные навыки и опыт. Если интересно, могу кратко объяснить как. Для проверки потребуется соорудить стенд, способный отдать нужный переменный ток, при безопасном напряжении.
1 -
Так а чего объяснить то?
0 -
Кто ответит за базар?
Бабушки на базаре, разумеется )))
0
Вопросы от начинающих по МК
в МК для начинающих
Опубликовано
И совершенно напрасно..