Easyelectronics.ru

Электроника для всех
Текущее время: 06 дек 2019, 02:51

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 16 янв 2011, 23:06 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
Если убрать cli() sei() тоже будет работать.

Ей вот это не нравится:
if (int_1ms == 1)cnt_1000ms++;
int_1ms = 0;

Вот так как-то более правильно
if (int_1ms == 1)
{
cnt_1000ms++;
int_1ms = 0;
}

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 16 янв 2011, 23:13 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
xrayman писал(а):
Если убрать cli() sei() тоже будет работать.


Вот так как-то более правильно
if (int_1ms == 1)
{
cnt_1000ms++;
int_1ms = 0;
}

ХА!! Переписал. Действительно работает.)))) Спасибо...
Загадочная логика компилятора...
А что ему здесь не нравится, не пойму?
Код:
if (int_1ms == 1)cnt_1000ms++;
int_1ms = 0;

В каждом цикле проверяется содержимое счетчика и в каждом цикле обнуляется int_1ms = 0, независимо от состояния счетчика..
В чем здесь криминал? С точки зрения асма равноценные варианты..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 16 янв 2011, 23:16 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
R_ura писал(а):
С точки зрения асма равноценные варианты..

видимо все-таки не равноценные...

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 17 янв 2011, 00:53 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
вовсе не равноценные. если после проверки на =1 и ПЕРЕД обнулением флага придет прерывание (а это не исключено!!!), факт потеряется. что в асме, что в си.
внеся сброс в условие - не теряем факт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 17 янв 2011, 02:12 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
Ink писал(а):
вовсе не равноценные. если после проверки на =1 и ПЕРЕД обнулением флага придет прерывание (а это не исключено!!!), факт потеряется. что в асме, что в си.
внеся сброс в условие - не теряем факт.

Все именно так и происходило.. Буду знать теперь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 21 янв 2011, 23:55 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
Правильно ли я понял , что для лучшей переносимости программ между различными компиляторами , вместо
типов данных unsigned char, unsigned int, signed char, signed int, предпочтительнее использовать uint8_t, uint16_t,
int8_t, int16_t и т.д..??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 22 янв 2011, 00:43 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3995
да.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 31 янв 2011, 00:14 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
ВинАВР задает все новые вопросы. Подскажите, что здесь не так? Отладчик в АСтудии никак не хочет входить в этот цикл.. С первой же строчки прыгает за пределы цикла..
Код:
for (i=4; i==7; i++)               
         {
            if (i!=4 )
            {                 
               //PORTD,(i-1) =1;   
               //PORTD,i = 0;     
               SetBit(PORTD, (i-1));
               ClearBit(PORTD, i);
               coof = coof + 3;     
            };
            tmp = PORTB;                                   
            tmp &= 0xE0;                             
            switch (tmp)                                             
            { case 0x60: { key_cod = 1 + coof; break;  };   
             case 0xA0: { key_cod = 2 + coof; break;  };   
             case 0xC0: { key_cod = 3 + coof; };          //
            };
         };


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 31 янв 2011, 00:17 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
Условие выполнения цикла ложно.
может все-таки i<7 или i<=7 поставить?

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 31 янв 2011, 00:27 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
xrayman писал(а):
Условие выполнения цикла ложно.
может все-таки i<7 или i<=7 поставить?

Точно.. Спасибо..))
А чем == не устраивал??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 31 янв 2011, 00:35 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
тем, что при i=4, i==7 ложно и цикл не выполняется ниразу

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 06 фев 2011, 15:26 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
Есть программа обработки клавиатуры 4х3, написанная на Паскале. Работает абсолютно нормально. Переписал ее на Си и оказалось, что в железе никак не хочет работать. Хотя в Астудийном отладчике работает все нормально.
Show


В железе, очевидно, в переменной key_cod на выходе не сохраняется код нажатой кнопки. Но в отладчике-то все нормально, как и должно быть.
Для проверки монтажа, прошиваю проц аналогичной программой на Паскале - работает.
Может кто подкинет идею, а то не знаю уже как быть? Может это сишный нюанс какой неучтенный?
МК, цоколевка и т.п. совпадает с указанным в проекте.

Переменная Key_cod определена как
Код:
volatile  uint8_t   key_cod;   // хранение кода нажатой кнопки


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 06 фев 2011, 18:07 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 11:58
Сообщения: 679
Откуда: Курган
может key_cod=0 в условие переместить? а то может быть она обнуляется до того как ее прочитали.
я бы сделал, чтобы функция возвращала значение состояния кнопок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 06 фев 2011, 18:29 
Старожил
Аватара пользователя

Зарегистрирован: 10 апр 2010, 18:47
Сообщения: 2490
Откуда: Харьков
lix писал(а):
может key_cod=0 в условие переместить? а то может быть она обнуляется до того как ее прочитали.

Да там и цикла-то нет, негде там обнуляться. Она и обнуляется только при входе в программу клавиатуры, чтобы работала не дольше одного цикла и не было двойной реакции на одно нажатие
Show

Второй день вожусь. Мистика .)) Разве что не совпадают ножки МК в подпрограмме и в железе. Но вроде все правильно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 04 июн 2011, 16:01 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 09:20
Сообщения: 63
Понадобилась функция перевода числа в строку. Естественно посмотрел avr-libc-user-manual, понятное дело взял itoa(). Сначала не мог понять, почему при превышении некоторого значения появляется '-' (минус), потом дошло, что появляется единица в старшем разряде и число этой функцией интерпретируется как отрицательное. Воощем вопрос, как числа более 32768 считать всё-таки беззнаковым для этой функции, может ли она это и как перевести числа большее этого в сторку без нака минус. Или надо писать свою функцию?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 10 сен 2011, 18:28 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 01:04
Сообщения: 814
Откуда: Черноголовка
А у меня такой вопрос:
При добавлении в проект исходных файлов, лежащих, например, на другом жестком диске, программа создает неверные пути в мейкфайле и компилятор не может найти нужные файлы.
Например:
Код:
pal.o: ..//C/Atmel/MAC_v_2_7_0/PAL/MEGA_RF/Generic/Src/pal.c
   $(CC) $(INCLUDES) $(CFLAGS) -c  $<

На это, сгенерированное программой, make будет ругаться:
Код:
make: *** No rule to make target `..//C/Atmel/MAC_v_2_7_0/PAL/MEGA_RF/ATMEGA128RFA1/Boards/EK1/pal_board.c', needed by `pal_board.o'.  Stop.

Но если исправить в пути первые несколько символов так:
Код:
pal.o: C:/Atmel/MAC_v_2_7_0/PAL/MEGA_RF/Generic/Src/pal.c
   $(CC) $(INCLUDES) $(CFLAGS) -c  $<

и указать загрузку внешнего мейкфайла заместо генерации своего, файл будет найден и программа будет успешно скомпилирована.

Вопрос: как заставить WinAVR генерировать нормальные пути в мейкфайле? Вручную все добавлять в мейкфайл очень непросто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 10 сен 2011, 18:41 
Старожил

Зарегистрирован: 31 янв 2010, 20:19
Сообщения: 4946
Откуда: Донецк-Мариуполь
Flint писал(а):
Понадобилась функция перевода числа в строку. Естественно посмотрел avr-libc-user-manual, понятное дело взял itoa().


Попробуй ltoa() - long to ascii


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 10 ноя 2011, 00:21 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 01:04
Сообщения: 814
Откуда: Черноголовка
Помню, как-то SWG показывал сгенерированные графики, показывающие, сколько ресурсов потребляют различные функции его программы. А есть ли что-либо подобное для WinAVR и AVR Студии?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 10 ноя 2011, 21:13 
Старожил
Аватара пользователя

Зарегистрирован: 19 фев 2010, 02:32
Сообщения: 564
Откуда: Рязань
Как вариант:
Код:
avr-nm --size-sort main.elf

_________________
После нас - хоть потоп (с) Лойсо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: WinAvr
СообщениеДобавлено: 10 ноя 2011, 23:46 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 01:04
Сообщения: 814
Откуда: Черноголовка
Спасибо, попробую.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB