Разница - в объявлении строки. В первом случае она объявлена как массив элементов char, а во втором случае - как указатель на элементы char. А при передаче строки в функцию размер строки потеряется в любом случае. Взятие sizeof(str) внутри функции вернет размер указателя, но не число элементов.
Я давно не имел дела с таким дисплеем и не помню таблицу перекодировки, но я бы сделал вот так:
Добавлено after 2 minutes 30 seconds: Для си тоже разные диалекты ... для микрочипов, атмелов винды .... это как разные языки программирования .... Для каждой среды разработки есть что то общее , но в основном оно разное .
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс мар 01, 2026 19:16:29
Модератор
Карма: 90
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Вам посоветовал почитать книгу только после нескольких (как оказалось, неудачных) попыток объяснить, почему не работает. Но Вы и дальше, упорно, пытаетесь гнуть свою линию. Зачем идти на форум, не читать ответы и не вникать в них ? Каков смысл ?
Для си тоже разные диалекты ... для микрочипов, атмелов винды ....
PIC16 изначально не был приспособлен для языка Си в силу крайне ограниченных ресурсов. Но AVR значительно лучше прогается на Си, поэтому книжку по этому языку именно СЛЕДУЕТ читать. Зачем? Затем, чтобы заработало то, что вы хотите. Вам же объяснили несколько раз, почему sizeof не будет работать в вашем случае. Потому что при передаче в функцию с точки зрения компилятра теряется связь с параметрами исходного массива - компилятор больше не может вычислить размер массива, он видит только указатель на первый его элемент.
Более менее понятно . Интересует метод вызова функции, и что бы он был стандартным - именно как и родной библиотеке ( не важно как называется ) типа xxx_lcd ( " ПРИВЕТ ")
Добавлено after 8 minutes 27 seconds: Ну или не "метод" пусть будет -синтаксис .
Добавлено after 5 minutes 24 seconds: Вот именно это ключевой момент .
Добавлено after 5 minutes 50 seconds: Просто хочу сделать универсальную библиотеку LCD с кириллицой для CV AVR, как сделал для PIC CCS .
Я показал выше - первое сообщение на этой странице. Длину строки можно не передавать, но в функции нужно не вычислять длину, а выводить строку до момента обнаружения в строке нуль-символа '\0' (технически он равен 0). Однако, для универсальности длину строки всё-таки следует передавать в явном виде. Потому что строка не всегда может быть нуль-терминированной.
Я показал выше - первое сообщение на этой странице.
Где там вызов функции ?
Добавлено after 7 minutes 29 seconds: Я же вроде по РУССКИ объяснял что нужен синтаксис вызова - имя функции (" ПРИВЕТ") ; И никак по другому ... Если невозможно по другому то почему ?
Добавлено after 2 minutes 28 seconds: Пусть П - будет идентификатор начала строки , я разберусь что делать дальше .
А я что, по-грузински написал чтоль? Чтоб понять синтаксис функции, написанный в начале этой страницы, как раз и НУЖНО ЧИТАТЬ КНИЖКУ ПО ЯЗЫКУ СИ. Пока не прочтете - не поймете.
Информация очень ценная ! Куда деньги переводить ?
Добавлено after 7 minutes 45 seconds: Это как по электронике , спрашиваешь -" кто юзал микросхему HX711 " , а тебе отвечают -" дак ты читай даташиты" - ГЕНИАЛЬНО !!! А я то Dibил не думал что так можно было .
Я ж вам привел ядро вашей функции без дурацкого цикла по количеству символов... Поместите его внутрь вашей функции, и будет у вас "универсальная" функция.
Хотя поддержу тех, кто рекомендует хотя бы основы языка Си изучить... Хотя бы те, которые одинаковы для всех "диалектов": массивы, указатели, циклы и функции stdlib
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
При передаче массивов (и прочего разноразмерного) в функцию просто передаю размер отдельным параметром А если хочется покрасивее - оборачиваю функцию в дефайн, который сам подставит sizeof(имя массива) в нужный параметр и при задании функции не придётся писать имя массива дважды
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Я ж вам привел ядро вашей функции без дурацкого цикла по количеству символов... Поместите его внутрь вашей функции, и будет у вас "универсальная" функция.
И оно работает , но есть непонятные моменты - почему работает ....
Добавлено after 1 hour 6 minutes 16 seconds: Ну вопрос номер 1 . void pint_rus (const char *str) точнее-const char *str - это типа указатель ... на что ? На начало строки .. Хорошо ... это указатель на начало строки в памяти МК , каково его значение ? Какой у него тип ?
Добавлено after 1 minute 56 seconds: Почему он const а его можно менять str++;
Добавлено after 5 minutes 36 seconds: Вопрос номер два ! В функциях СИ переменные создаются на время жизни функции , а константы ? Ну переменные хранятся в регистрах , а константы во флеш ... то есть объявление const в функции будет убивать каждый раз програмную флеш память ?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения