CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: CodeVision AVR в вопросах и ответах

Сообщение roman.com »

а потом постоянно надо возвращаться в начало программы и смотреть чему равен define...
бред полный !
:facepalm:

по нормальному объявляешь переменную по имени которой понятно за что отвечает эта переменная.

Код: Выделить всё

unsigned char port_B = 0;


а потом записывает в переменную состояние порта "B"

Код: Выделить всё

port_B = PINB;


далее... в программе мы знаем что в переменно "port_B" записано состояние порта "B".
это понятно по имени переменной.
и далее спокойно работаем с переменно "port_B".
без всяких define...
:tea:

кому-то точно надо пойти дальше учиться))
:facepalm:

Устал я от тебя.
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5722
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение >TEHb< »

roman.com писал(а):а потом постоянно надо возвращаться в начало программы и смотреть чему равен define...

Зачем? В самом дефайне отражено его предназначение. Конструкция типа if (VHODNOY_SIGNAL_PRIYOMNIKA == 1 ) {...} недостаточно отражает логику происходящего? Какая разница к какой конкретно ножке там за кулисами подключен этот сигнал?
"Привет!" - соврал он.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: CodeVision AVR в вопросах и ответах

Сообщение roman.com »

разница в читаемости кода...

в переменной "port_B" записано состояние порта "B".
больше ничего не надо.

всё ясно.
:facepalm:
если кому надо раздуть код своей программы до немыслимых размеров... обращайтесь к OKF и >TEHb< ))
:tea:
OKF
Это не хвост, это антенна
Сообщения: 1378
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение OKF »

Тяжелый случай.(
Изменил ты подключение. И что будешь переписывать везде port_b на port_d?
Даже, если ничего не меняешь, get_dtmf() уже говорит сам за себя. И даже комментарии излишни.
И неважно как ты его получишь, какие биты к каким портам подключены.
Это же не ассемблер. И даже там стараются отделять подключение и логику.
Рома, удачи!
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5722
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение >TEHb< »

Ну классно. А если часть сигналов заведены на порт Б, а часть на порт А? Всё, переменную никак не назвать.
Если ноги-порты задавать дефайнами, то можно сразу и их настройку проводить. То есть программа настраивается в одной точке.
"Привет!" - соврал он.
Аватара пользователя
HardWareMan
Мучитель микросхем
Сообщения: 429
Зарегистрирован: Ср сен 02, 2015 07:47:20

Re: CodeVision AVR в вопросах и ответах

Сообщение HardWareMan »

а потом постоянно надо возвращаться в начало программы и смотреть чему равен define...
бред полный !

Зачем? Все современные IDE выводят значения констант в контекстной подсказке просто после наведения на имя константы. А в режиме отладки так же можно смотреть и значения переменных...
Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ
Актуальность репозитория: 22 апреля 2026 года
Если чего-то не хватает с сайта st.com - пишите, докачаю.
/!\ Обновлений для STM32PowerMon и STM32PowerMon-UCPD временно не будет.
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Добрый вечер уважаемые ! Как в программе организовать рестарт МК ? Ну например в PIC CCS есть команда restart ( cpu ) точно не помню как она пишется но она есть. А в CV AVR такой нет как я понял.
veso74
Поставщик валерьянки для Кота
Сообщения: 1902
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение veso74 »

asm("jmp 0"); или аналогично в выбранном компиляторе (периферия не сбрасывается),
но лучше с WDT: wdt_enable(WDTO_15MS); и какая-то пауза или бесконечный цикл до перезапуска.
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Ну то есть заставить собачий таймер отработать ? ...

Добавлено after 3 hours 15 minutes 49 seconds:
Да ! Там одна кнопка , краткое нажатие меняет параметры отображения , длинное - процедура изменения параметров ... Всё на динамической индикации , и в ней же сброс сторожевого таймера ... Можно ещё сделать более длинное нажатие на кнопку , и тогда сделать бесконечный цикл без входа в индикацию , конечно тогда WDT сбросит МК.
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Как в CV AVR реализовать передачу строки ( не строчной переменной ) в функцию или процедуру ?
Такой код не работает , хотя вроде всё логично ...

Код: Выделить всё

const unsigned char sim[33]=
{65,160,66,161,224,69,163,164,165,166,75,167,77,72,79,168,80,67,84,169,170,88,225,171,172,226,196,174,173,175,176,177}; //коды Кириллицы для китайских LCD

const  char sim1[33]=
{'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ш','Щ','Ь','Ы','Ъ','Э','Ю','Я'}; //коды Кириллицы винды

void pint_rus (char str[])
{
  unsigned char j,j1,size ;
 
  size=sizeof(str)-1; // определяем длинну строки
  for(j=0;j<size;j++); // начинаем перекодировку символов из виндовых в китайские LCD
            {
              for(j1=0;j1<33;j1++)
              if (sim1[j1]==str[j])
              lcd_putchar(sim[j1]); // выводим на LCD РУССКИЙ текст
 
            }
}

while (1)
          {
              lcd_gotoxy(0,3);
              pint_rus("ПРЕВЕД МЕДВЕД");

          }
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Rapra »

В Си нет такого типа - "строка". Поэтому строка - это обычный массив элементов типа char. А передача массива в функцию - по указателю.

Код: Выделить всё

void Print(const char *str, unsigned int len)
{
    while(len--)
    {
          ....
    }
}

Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

sizeof не определяет размер строки! Размер строки определяет strlen
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Ну как бы размер строчной переменной прекрасно как раз таки определяет.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

Определяет, говорите? И даже по передаваемому в параметре функции указателю тоже определяет?

sizeof может определить только размер константной строки.

Но вообще говоря, для перекодировки строк не надо знать их длины, достаточно брать по одному символу, пока не возьмется 0.

Добавлено after 3 minutes 21 second:
Как-то так:

Код: Выделить всё

 char c;
while(c=*str++) {
   encode_char(c); // обработка очередного символа строки str
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Thinnnfor писал(а):хотя вроде всё логично ...
Где Вы видите логику в :

Код: Выделить всё

char str[]

sizeof(str)
?

Что ожидаете в этом случае от sizeof ? И почему именно такие ожидания ?
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Ну вот кусок программы для часов-термометра которых уже несколько штук и работают 5 лет.
Реализация бегущей строки для светодиодных матриц 8х8 , выкладывать коды функций нет смысла они работают. Ну и sizeof вполне работает .

Код: Выделить всё


char unsigned str2[]="   ТЕМПЕРАТУРА ВОЗДУХА ";// глобальная строковая переменная

while (1)        // основной цикл программы
          {
             a=5; // скорость бегущей строки, не будем заморачиваться
             size=sizeof(str2)-1;  // определяем размер строковой переменной
             for(k=1;k<size;k++)  //выводим  текст "   ТЕМПЕРАТУРА ВОЗДУХА "
              {
               simv=(str2[k]) ; // определяем код очередного символа в выводимой строке
               obrzap (simv) ; // заполняем невидимую нуль-матрицу ( справа )для последующего сдвига в видимую область, из таблицы 8*8 для матрицы светодиодов
               sdvig(); //сдвиг 8 строк * 8 раз в лево
              } // далее повторяемся для следующего символа пока строка не кончится

          }
Rapra
Грызет канифоль
Сообщения: 259
Зарегистрирован: Пн фев 16, 2026 17:30:02

Re: CodeVision AVR в вопросах и ответах

Сообщение Rapra »

В таком виде sizeof срабатывает. Но при передаче в функцию теряется размер строки (массива элементов char)/

Длину строки в функцию лучше передавать в явном виде, как показывал ранее. Это позволит выводить строку не полностью, а также не нуль-терминированные строки
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Вот в том и вопрос... Хотелось бы не писать одно и тоже для вывода каждой строки, а сделать функцию в которую будет передаваться только строка.

Добавлено after 1 minute 13 seconds:
Всмысле только содержимое строки

Добавлено after 22 minutes 19 seconds:
Ну и допустим в стандартной библиотеке CV AVR #include <alcd.h>
lcd_putsf("hello word"); работает же !
Почему я не могу написать библиотеку где будет просто print_rus (" привет мир ") просто со скобками и кавычками . Кстати для PIC CCS я переделал стандартную библиотеку , и она именно так работает как надо.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: CodeVision AVR в вопросах и ответах

Сообщение Adrift »

Почему я не могу написать библиотеку где будет просто print_rus (" привет мир ") просто со скобками и кавычками .

Вам же сказали, что для определения длины строки используйте strlen, в чем проблема? Хотя там размер не сильно и нужен...
Аватара пользователя
Thinnnfor
Вымогатель припоя
Сообщения: 590
Зарегистрирован: Пн июн 03, 2024 22:29:24

Re: CodeVision AVR в вопросах и ответах

Сообщение Thinnnfor »

Thinnnfor писал(а):Кстати для PIC CCS я переделал стандартную библиотеку , и она именно так работает как надо.


Вот так :
Правда только для заглавных букв , но это уже мелочи !

Изображение

И вызывается вот так :
lcd_rus(" РОССИЯ ФОРЕВЕР ЕВРОПА ГОВНО ");
Ответить

Вернуться в «AVR»