Выглядеть это может вот так, на примере вывода двух строк в классический двухстрочник 1602
printf и fprintf смотрятся гораздо органичнее при использовании именно потокового вывода, для чего надо определить одну-единственную функцию вывода символа, я ранее рассказывал (на своём сайте), как это можно сделать. и тогда на самом деле красота: хоть в USART, хоть на дисплей, хоть азбукой Морзе...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Так то оно так, но вы хотите, чтобы у вопрошавшего порвался мозг от многочисленных связей между функциями? Тем более, что судя по всему, у него и так уже он закипел Там, в его случае - графический дисплей. А в графическом дисплее координаты вывода не задаются однозначно строкой. И если иметь дело с пропорциональными шрифтами (у которых разная ширина символа - ifr и Жшы - разной ширины), не получается подравнять вывод "пробелами" и не получается точно угадать занимаемую строкой ширину. Посему, "печатающая" функция должна хорошо взаимодействовать с модулем растровой графики. Вдобавок, у ARM-ов встроенные "печатающие" функции тянут за собой капец как много всякого хлама от Newlib, и прежде чем взять стандартную printf, двадцать раз подумаешь - а нужно ли тебе вообще это, чтобы напечатать банальное "Напряжение: 12,4 В, Ток: 7,6 А". Это всё можно сделать самописным методом.
Текст (массив символов) по умолчанию считается signed?
Он считается как const char, а вот как распознается char без явного указания знака (signed или unsigned) - это уже определяется на уровне принятых компилятором условностей. В вашем случае, char считается как signed char, то есть, знаковым однобайтным. Точно так же как и int без явного указания считается signed int. Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"
Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"
Спасибо, помогло.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Практика - критерий истины. Исчерпывающее предоставление
Если про критерий истины то пожалуйста в личку. Вот так он ругается.
Код:
#223-D: function "draw_men" declared implicitly. так ругается на попытку объявить main.c(3): error: #110: expected either a definition or a tag name void draw_men(struct *char,char); main.c(3): error: #110: expected either a definition or a tag name
Собственно это весь код проблемы . За исключением главной функции "main". То что пишет Кейл понятно. Остальное не ясно.... Когда draw_men - ничего не делает т.е. вообще "пустая" Ничего не меняется.
Не плохо бы увидеть, как слова трансформируете в С код. Это и будет наглядным проявления вашей истины в этом вопросе. Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры. Структуру вы видели. Вызов к примеру так
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Ответов стало быть не читаете? Вы были в одном шаге от верного решения проблемы. Хинт: структура здесь не при чём. Важен тип передаваемого параметра. Куда и насколько многомерно он включается - принимающей функции безразлично - она работает либо с копией параметра в стеке, либо по адресу, на который указывает параметр.
Не бъётся фактура с предпоследней вашей цитатой - там где "в параметрах вызова адрес одной из полей структуры". Семантика имени функции настаивает на том, что вы желаете передать в функцию указатель типа struct text_menu* на данные собствено объекта, хотя, впрочем, никто не мешает передать туда и указатель на данные поля, типа конечно-же const char*, но в этом случае компилятор либо заставит вас указать какую именно переменную в структуре вы передаёте, либо вы заткнёте его прямым приведением типа указателя и функция будет вынуждена кушать данныe поля .bi_1. В обеих случаях победит умнейший.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Повторюсь. Хорошо бы многословие заменить кодом. Если не удобно показать на моём примере. Покажите на своём - надеюсь смогу понять. Несколько строк Си гораздо информативнее. Первое правило , что вы написали содержит слово "эксплуатации", для этого оно годится. Надеюсь, мы с вами тут другим занимаемся.
Не плохо бы увидеть, как слова трансформируете в С код. Это и будет наглядным проявления вашей истины в этом вопросе. Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры. Структуру вы видели. Вызов к примеру так
Код:
draw_men(&tex_1)
Код:
draw_men(&tex_1.bi_1);
передача в функцию адреса одного поля структуры. только в структуре у вас каждое поле - это указатель, поэтому тип параметра в функции должен быть char ** - указатель на указатель на символ. если надо просто передать значение этого поля, то тогда тип char * в параметре функции, а вызов просто
Код:
draw_men(tex_1.bi_1);
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
На работе реанимируют очень старый проект 2002 года. Люди которые его писали давно уволились и контакты потеряны. От них остался исходник на си для МК серии MCS-51. В кейле он не компилируется, выдает кучу ошибок/предупреждений. Ругается он на такую строку: #include <io51.h> выдает что неизвестны прагмы: #pragma memory=code #pragma memory=idata #pragma memory=pdata не понимает таких заголовков прерываний: void interrupt[0x0B] timer0_interrupt(void) В кейле то же самое прерывание должно быть так: "void timer0_interrupt(void) interrupt 1"
Конечно все это можно бы перевести на современный компилятор, но начальство хочет чтоб для контроля сначала скомпилировать неправленый текст. Помогите опознать чем это транслировали в 2002 году.
_________________ Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53 Сообщений: 3092 Откуда: москва, уфа
Рейтинг сообщения:1
похоже старый IAR
Цитата:
In version 5.x, #pragma memory specifies the default location of data objects, and #pragma function specifies the default location of functions. ... The following pragma directives have been removed: codeseg function memory warnings These pragma directives are recognized and will give a diagnostic message but will have no effect on the generated code in version 6.x. Note: Instead of the #pragma codeseg directive, we recommend using the #pragma location directive or the @ operator for specifying an absolute location.
Зарегистрирован: Ср сен 06, 2017 21:34:45 Сообщений: 5
Рейтинг сообщения:0
Добрый день, ищу схему измерительного прибора на микроконтроллере запрограммированный на Си, т.к это для диплома схема не должна быть из одного микроконтроллера и двух других элементов. Но в поиске таких схем я натыкался только на схемы ,которые запрограммированы на асемблере или в формате hex
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения