Код: Выделить всё
if((PINC & (1 << PC0)) == 1)
if((PINC & (1 << PC1)) == 2)Код: Выделить всё
if((PINC & (1 << PC0)) == 1)
if((PINC & (1 << PC1)) == 2)Код: Выделить всё
if((PINC & (1 << PC0)) == (1 << PC0))
if((PINC & (1 << PC1)) == (1 << PC1))Код: Выделить всё
if(PINC & (1 << PC0))
if(PINC & (1 << PC1))Код: Выделить всё
#include <avr/io.h>
int main(void)
{
int a;
DDRB=(1<<DDB0);
while(1)
{
PORTB=(1<<PB0);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
PORTB=(0<<PB0);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
for(a=0; a<100; ++a);
}
while(1);
}
Код: Выделить всё
volatile int a;не Q0, а O0 - это и есть отключенная оптимизацияArlleex писал(а):Может где в другом месте она отключается?
Arlleex писал(а):Собственно, отладчиком в AVRStudio4 посмотрел - задержки в форме конструкций for() не работают. Почему?
и удивитесь размеру получающегося кода - фтопкуBerZerK-ku писал(а):Вариант 1.
Отключите оптимизацию.
не так-то элементарно ПРАВИЛЬНО вставить в код NOP - да и неразумно это... фтопку, хотя и не в самый жарBerZerK-ku писал(а):Вариант 2.
Добавьте в цикл пустую команду (nop)
из данных советов - наиболее правильный с точки зрения подхода, но тоже неразумный. пусть ждет очереди фтопкуBerZerK-ku писал(а): Вариант 3.Код: Выделить всё
volatile int a;
Не в курсе чем вы пользуетесь. В IAR при нормально написанной программе оптимизация дает выигрыш процентов 20 по размеру, по скорости не проверял.Мастер Ломастер писал(а):и удивитесь размеру получающегося кода - фтопку
В данном случае был конкретный вопрос и на него конкретный ответ. Надо быть великим мастером, чтобы внести подобное изменение?Мастер Ломастер писал(а):не так-то элементарно ПРАВИЛЬНО вставить в код NOP - да и неразумно это... фтопку, хотя и не в самый жар
Код: Выделить всё
for(a = 0; a< 100; ++a) _NOP();При малых величинах задержки for мало отличается от _delay_us. А большие лучше/правильнее делать на таймере.Мастер Ломастер писал(а):правильный и самый разумный вариант заключается в подключении модуля <avr/delay.h> и использовании для задержек функций _delay_ms() и _delay_us(). об особенностях использования этих функций ищите на форуме - это важно!
Мастер Ломастер писал(а):он ТУПО делает то, что написано. а с этой точки зрения
Вы сами себе противоречите. Опять же приведу в пример IAR: он спокойно обработает вышеприведенный пример.Мастер Ломастер писал(а):с точки зрения компилятора это АБСОЛЮТНО БЕССМЫСЛЕННО
Авось одумается и пересядет на качественный продукт ))Мастер Ломастер писал(а):1. автор юзает WinAVR, и рассказы про IAR в данном контексте не очень уместны.
Непонятно, объясните почему? У меня при максимальной оптимизации и так работает:Мастер Ломастер писал(а):2. опять-таки, в WinAVR правильная вставка NOP-а заключается в достаточно неочевидном для новичка asm volatile ("nop"); - согласны, что это на самом деле не так-то просто (в смысле, непонятно, почему именно так)?
Код: Выделить всё
for(a=0; a<100; ++a)
asm ("nop"::);Как это сделать, не используя asm вставки? И что плохого в такой задержке? Это очередной миф, подобный не использованию оператора goto?Мастер Ломастер писал(а):3. что касается сравнения for с функциями задержки, то они неуместны в принципе, т.к. грамотно написанная "вручную" задержка вообще не будет отличаться от "библиотечной", но начинающему это не под силу - и ни к чему совершенно. кстати, я не начинающий, но никогда до самописных for-задержек не опускался.
Если я что-то пишу, значит хочу чтобы это было. Компилятор с отключенной оптимизацией ничего не должен убирать по своему хотению. При включении оптимизации, программист уже должен задумываться над тем что пишет.Мастер Ломастер писал(а):4. я себе не противоречу. просто вдумайтесь в СМЫСЛ написанного: for(a=0; a<10; a++) _ NOP;
А кварц на плате стк какой?a.garkin писал(а):Помогите понять в чем проблема.
Суть такова есть СТК 500 оригинальный. Есть плата изготовленная на производстве. Длина дорог от выводовконтроллера до isp разъема пару см максимум. шлейф родной. суть проблемы в том в этой плате в режиме внутреннегго программирования ни мега8535 ни мега 32 не програмируется при частоте больше 5 Кгерц. выпаиваю контроллер, сую в другую плату изготовленную дома прекрасно шьется при частоте 57 кгерц. вопрос в чем дело пайка отличная? под лупой разглядывал. плату промывал, ацетоном+сжатым воздухом продул. оба контроллера так себя ведут именно в этой плате. в другой они же нормально шьются.
А какая разница тут какой стоит кварц? если я ставлю режим работы от внутреннего картинка не меняется... Кварц на 16 Мгц. Просто мне сама ситуация не понятна. Не может ли так влиять то что у контроллера используются все ноги? Прошивка заливается на низкой скорости, но о боже как долго когда 85% памяти юзается. Прошивка работает вроде как надо. в чем прикол все таки?vitalik_1984 писал(а):А кварц на плате стк какой?a.garkin писал(а):Помогите понять в чем проблема.
Суть такова есть СТК 500 оригинальный. Есть плата изготовленная на производстве. Длина дорог от выводовконтроллера до isp разъема пару см максимум. шлейф родной. суть проблемы в том в этой плате в режиме внутреннегго программирования ни мега8535 ни мега 32 не програмируется при частоте больше 5 Кгерц. выпаиваю контроллер, сую в другую плату изготовленную дома прекрасно шьется при частоте 57 кгерц. вопрос в чем дело пайка отличная? под лупой разглядывал. плату промывал, ацетоном+сжатым воздухом продул. оба контроллера так себя ведут именно в этой плате. в другой они же нормально шьются.
Просто частота программирования зависит напрямую от такта камня.частота исп вроде 1/4от такта максимум.Можно на маленькой скорости менять фьюзы на 8Мгц и заливать на более высокой скорости.
avr studio, codevision как и писал выше на 2 СООБЩЕНИЯ оригинальный СТК500 (прошивка последняя) и только в этой плате в других работает норма.BerZerK-ku писал(а):При прошивке МК находится в состоянии сброса и становится не важно сколько и какие ноги задействованы в программе.
Скорости прошивки удручают. Как было написано выше, прошивать МК можно на частоте в 4-6 раз меньше тактовой (у меня обычно стоит 1 МГц).
Каким ПО и программатором пользуетесь?
По любому отслеживает, скажет что-нибудь типа нет места не могу записать.ВитГо писал(а):а AVR Studio отслеживает наложение кода ?
например если в одном файле стоит .org 0x100 и длинна кода например 1 кб
и есть другой файл с .org 0x50 и длинной кода в 256 байт
при компиляции будет наложение так как фактически по одним и тем же адресам нужно будет разместить разные куски кода
студия выдает какой нить варнинг или ошибку при этом ?
p.s. как то все руки не доходят самому проверить, может быть ктото сталкивался...