printf и fprintf смотрятся гораздо органичнее при использовании именно потокового вывода, для чего надо определить одну-единственную функцию вывода символа, я ранее рассказывал (на своём сайте), как это можно сделать. и тогда на самом деле красота: хоть в USART, хоть на дисплей, хоть азбукой Морзе...Зурбаган писал(а):Выглядеть это может вот так, на примере вывода двух строк в классический двухстрочник 1602
Вопросы по С/С++ (СИ)
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Re: Вопросы по С/С++ (СИ)
Так то оно так, но вы хотите, чтобы у вопрошавшего порвался мозг от многочисленных связей между функциями?
Тем более, что судя по всему, у него и так уже он закипел 
Там, в его случае - графический дисплей. А в графическом дисплее координаты вывода не задаются однозначно строкой. И если иметь дело с пропорциональными шрифтами (у которых разная ширина символа - ifr и Жшы - разной ширины), не получается подравнять вывод "пробелами" и не получается точно угадать занимаемую строкой ширину. Посему, "печатающая" функция должна хорошо взаимодействовать с модулем растровой графики.
Вдобавок, у ARM-ов встроенные "печатающие" функции тянут за собой капец как много всякого хлама от Newlib, и прежде чем взять стандартную printf, двадцать раз подумаешь - а нужно ли тебе вообще это, чтобы напечатать банальное "Напряжение: 12,4 В, Ток: 7,6 А". Это всё можно сделать самописным методом.
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3129847#p3129847"]Текст (массив символов) по умолчанию считается signed?[/uquote]
Он считается как const char, а вот как распознается char без явного указания знака (signed или unsigned) - это уже определяется на уровне принятых компилятором условностей. В вашем случае, char считается как signed char, то есть, знаковым однобайтным. Точно так же как и int без явного указания считается signed int.
Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"
Там, в его случае - графический дисплей. А в графическом дисплее координаты вывода не задаются однозначно строкой. И если иметь дело с пропорциональными шрифтами (у которых разная ширина символа - ifr и Жшы - разной ширины), не получается подравнять вывод "пробелами" и не получается точно угадать занимаемую строкой ширину. Посему, "печатающая" функция должна хорошо взаимодействовать с модулем растровой графики.
Вдобавок, у ARM-ов встроенные "печатающие" функции тянут за собой капец как много всякого хлама от Newlib, и прежде чем взять стандартную printf, двадцать раз подумаешь - а нужно ли тебе вообще это, чтобы напечатать банальное "Напряжение: 12,4 В, Ток: 7,6 А". Это всё можно сделать самописным методом.
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3129847#p3129847"]Текст (массив символов) по умолчанию считается signed?[/uquote]
Он считается как const char, а вот как распознается char без явного указания знака (signed или unsigned) - это уже определяется на уровне принятых компилятором условностей. В вашем случае, char считается как signed char, то есть, знаковым однобайтным. Точно так же как и int без явного указания считается signed int.
Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"
Ёшкин кот обормот
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="Зурбаган",url="/forum/viewtopic.php?p=3132740#p3132740"]Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"[/uquote]
Спасибо, помогло.
Спасибо, помогло.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
-
pnp_machinist
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Вс окт 21, 2012 17:32:00
- Откуда: СССР
Re: Вопросы по С/С++ (СИ)
Подскажите как правильно объявить функцию - draw_men.
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.
Код: Выделить всё
struct text_menu
{
char *bi_1;
char *bi_2;
char *bi_3;
char *bi_4;
char *bi_5;
char *bi_6;
char *bi_7;
char *bi_8;
}tex_1,tex_12,tex_42,tex_43,tex_44,tex_62,tex_72;
struct text_menu *lv_1 = &tex_1;
struct text_menu *lv_12 = &tex_12;
void draw_men(struct text_menu* op,char parag)
{
//тут мой код, что-то делает. Думаю это не так важно.
}Re: Вопросы по С/С++ (СИ)
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3149377#p3149377"]Подскажите как правильно объявить функцию - draw_men.
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.[/uquote]
Практика - критерий истины. Исчерпывающее предоставление материала для размышлений не только экономит время тех, кому предлагаете поразмышлять над вашей проблемой, но и стимулирует их к этому. Ругань - в студию! ©
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.[/uquote]
Практика - критерий истины. Исчерпывающее предоставление материала для размышлений не только экономит время тех, кому предлагаете поразмышлять над вашей проблемой, но и стимулирует их к этому. Ругань - в студию! ©
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
- Реклама
-
pnp_machinist
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Вс окт 21, 2012 17:32:00
- Откуда: СССР
Re: Вопросы по С/С++ (СИ)
[uquote="Siarzhuk",url="/forum/viewtopic.php?p=3149817#p3149817"]Практика - критерий истины. Исчерпывающее предоставление[/uquote]
Если про критерий истины то пожалуйста в личку.
Вот так он ругается.
Собственно это весь код проблемы . За исключением главной функции "main".
То что пишет Кейл понятно. Остальное не ясно....
Когда draw_men - ничего не делает т.е. вообще "пустая" Ничего не меняется.
Если про критерий истины то пожалуйста в личку.
Вот так он ругается.
Код: Выделить всё
#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
То что пишет Кейл понятно. Остальное не ясно....
Когда draw_men - ничего не делает т.е. вообще "пустая" Ничего не меняется.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
main.c(3): error: #110: expected either a definition or a tag name
void draw_men(struct *char,char);Код: Выделить всё
void draw_men(struct text_menu* op,char parag)
{
}Здесь любой нормальный компилятор материться должен.
Re: Вопросы по С/С++ (СИ)
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3149876#p3149876"][uquote="Siarzhuk",url="/forum/viewtopic.php?p=3149817#p3149817"]Практика - критерий истины.[/uquote]
Если про критерий истины то пожалуйста в личку.
[/uquote]
Как предупреждал Приснопамятный - "Приватно - не консультироваю!"
Но вообще это была отсылка к первому правилу эксплоатации - "Работает - не трогай!".
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3149876#p3149876"]void draw_men(struct *char,char);[/uquote]
Во-первы́х - char - это зарезервированное слово языка и именем параметра быть не может, во-вто́рых - тип этого якобы "параметра" указан не полностью... В сюхе, в отличие от плюсов - имя типа структуры типом не является - такштаааа.... © извольте прописать ФИО полностью. Во-третьих - имени структурированного типа там не фигурирует от слова "вапще".
Если про критерий истины то пожалуйста в личку.
Как предупреждал Приснопамятный - "Приватно - не консультироваю!"
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3149876#p3149876"]void draw_men(struct *char,char);[/uquote]
Во-первы́х - char - это зарезервированное слово языка и именем параметра быть не может, во-вто́рых - тип этого якобы "параметра" указан не полностью... В сюхе, в отличие от плюсов - имя типа структуры типом не является - такштаааа.... © извольте прописать ФИО полностью. Во-третьих - имени структурированного типа там не фигурирует от слова "вапще".
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
-
pnp_machinist
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Вс окт 21, 2012 17:32:00
- Откуда: СССР
Re: Вопросы по С/С++ (СИ)
Не плохо бы увидеть, как слова трансформируете в С код.
Это и будет наглядным проявления вашей истины
в этом вопросе.
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так
Это и будет наглядным проявления вашей истины
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так
Код: Выделить всё
draw_men(&tex_1)Re: Вопросы по С/С++ (СИ)
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Не плохо бы увидеть, как слова трансформируете в С код. Это и будет наглядным проявления вашей истины[/uquote]
Аксиома "Работает - не трогай" требует доказательства? :-D
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.[/uquote]
Ответов стало быть не читаете? Вы были в одном шаге от верного решения проблемы. Хинт: структура здесь не при чём. Важен тип передаваемого параметра. Куда и насколько многомерно он включается - принимающей функции безразлично - она работает либо с копией параметра в стеке, либо по адресу, на который указывает параметр.
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Структуру вы видели.[/uquote]
Несогласия с компилятором по поводу синтаксических ошибок - верный признак того, что скоро снова придётся почитать опостылевшую "книжку по Си"™.
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Вызов к примеру так[/uquote]
Не бъётся фактура с предпоследней вашей цитатой - там где "в параметрах вызова адрес одной из полей структуры". Семантика имени функции настаивает на том, что вы желаете передать в функцию указатель типа struct text_menu* на данные собствено объекта, хотя, впрочем, никто не мешает передать туда и указатель на данные поля, типа конечно-же const char*, но в этом случае компилятор либо заставит вас указать какую именно переменную в структуре вы передаёте, либо вы заткнёте его прямым приведением типа указателя и функция будет вынуждена кушать данныe поля .bi_1. В обеих случаях победит умнейший.
Аксиома "Работает - не трогай" требует доказательства? :-D
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.[/uquote]
Ответов стало быть не читаете? Вы были в одном шаге от верного решения проблемы. Хинт: структура здесь не при чём. Важен тип передаваемого параметра. Куда и насколько многомерно он включается - принимающей функции безразлично - она работает либо с копией параметра в стеке, либо по адресу, на который указывает параметр.
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Структуру вы видели.[/uquote]
Несогласия с компилятором по поводу синтаксических ошибок - верный признак того, что скоро снова придётся почитать опостылевшую "книжку по Си"™.
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Вызов к примеру так
Код: Выделить всё
draw_men(&tex_1)Не бъётся фактура с предпоследней вашей цитатой - там где "в параметрах вызова адрес одной из полей структуры". Семантика имени функции настаивает на том, что вы желаете передать в функцию указатель типа struct text_menu* на данные собствено объекта, хотя, впрочем, никто не мешает передать туда и указатель на данные поля, типа конечно-же const char*, но в этом случае компилятор либо заставит вас указать какую именно переменную в структуре вы передаёте, либо вы заткнёте его прямым приведением типа указателя и функция будет вынуждена кушать данныe поля .bi_1. В обеих случаях победит умнейший.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! 
-
pnp_machinist
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Вс окт 21, 2012 17:32:00
- Откуда: СССР
Re: Вопросы по С/С++ (СИ)
Повторюсь. Хорошо бы многословие заменить кодом.
Если не удобно показать на моём примере. Покажите на своём - надеюсь смогу понять.
Несколько строк Си гораздо информативнее.
Первое правило , что вы написали содержит слово "эксплуатации", для этого оно годится.
Надеюсь, мы с вами тут другим занимаемся.
Если не удобно показать на моём примере. Покажите на своём - надеюсь смогу понять.
Несколько строк Си гораздо информативнее.
Первое правило , что вы написали содержит слово "эксплуатации", для этого оно годится.
Надеюсь, мы с вами тут другим занимаемся.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Не плохо бы увидеть, как слова трансформируете в С код.
Это и будет наглядным проявления вашей истины
в этом вопросе.
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так[/uquote]
передача в функцию адреса одного поля структуры. только в структуре у вас каждое поле - это указатель, поэтому тип параметра в функции должен быть char ** - указатель на указатель на символ. если надо просто передать значение этого поля, то тогда тип char * в параметре функции, а вызов просто
Это и будет наглядным проявления вашей истины
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так
Код: Выделить всё
draw_men(&tex_1)Код: Выделить всё
draw_men(&tex_1.bi_1);Код: Выделить всё
draw_men(tex_1.bi_1);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
pnp_machinist
- Открыл глаза
- Сообщения: 40
- Зарегистрирован: Вс окт 21, 2012 17:32:00
- Откуда: СССР
Re: Вопросы по С/С++ (СИ)
ARV cпасибо . Это уже руководство к действию. 
- paskal
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Пн сен 05, 2011 10:03:06
- Откуда: Тула
опознать старый компилятор
На работе реанимируют очень старый проект 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 году.
#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 году.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
В гугле такое написание прерывания находится у IAR.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- paskal
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Пн сен 05, 2011 10:03:06
- Откуда: Тула
Re: Вопросы по С/С++ (СИ)
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3178332#p3178332"]В гугле такое написание прерывания находится у IAR.[/uquote]
Не согласен. Вот как описано в туториале на IAR:
Не согласен. Вот как описано в туториале на IAR:
Код: Выделить всё
#pragma vector=0xIE0_int /* Symbol defined in I/O header file */
__interrupt void my_interrupt_routine(void)
{
/* Do something */
}
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ну это еще и от подключенного компилятора зависит, верно?
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- paskal
- Нашел транзистор. Понюхал.
- Сообщения: 160
- Зарегистрирован: Пн сен 05, 2011 10:03:06
- Откуда: Тула
Re: Вопросы по С/С++ (СИ)
Верно. И я ищу этот компилятор. Мне исходник надо скомпилировать.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Re: Вопросы по С/С++ (СИ)
похоже старый 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.
- Вложения
-
- EW8051_MigrationGuide_v7.pdf
- (388.72 КБ) 522 скачивания
Re: Вопросы по С/С++ (СИ)
Добрый день, ищу схему измерительного прибора на микроконтроллере запрограммированный на Си, т.к это для диплома схема не должна быть из одного микроконтроллера и двух других элементов. Но в поиске таких схем я натыкался только на схемы ,которые запрограммированы на асемблере или в формате hex


