Вопросы по С/С++ (СИ)

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

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

Зурбаган писал(а):Выглядеть это может вот так, на примере вывода двух строк в классический двухстрочник 1602
printf и fprintf смотрятся гораздо органичнее при использовании именно потокового вывода, для чего надо определить одну-единственную функцию вывода символа, я ранее рассказывал (на своём сайте), как это можно сделать. и тогда на самом деле красота: хоть в USART, хоть на дисплей, хоть азбукой Морзе...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Зурбаган
Открыл глаза
Сообщения: 76
Зарегистрирован: Вс июн 18, 2017 08:12:41

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"
Ёшкин кот обормот
Реклама
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Zhuk72 »

[uquote="Зурбаган",url="/forum/viewtopic.php?p=3132740#p3132740"]Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"[/uquote]
Спасибо, помогло.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
pnp_machinist
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Re: Вопросы по С/С++ (СИ)

Сообщение pnp_machinist »

Подскажите как правильно объявить функцию - draw_men.
Вообще то так компилируется и работает. Но однако ругается 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)

{

//тут мой код, что-то делает. Думаю это не так важно.

}
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3149377#p3149377"]Подскажите как правильно объявить функцию - draw_men.
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.[/uquote]
Практика - критерий истины. Исчерпывающее предоставление материала для размышлений не только экономит время тех, кому предлагаете поразмышлять над вашей проблемой, но и стимулирует их к этому. Ругань - в студию! © :)
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Реклама
pnp_machinist
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Re: Вопросы по С/С++ (СИ)

Сообщение pnp_machinist »

[uquote="Siarzhuk",url="/forum/viewtopic.php?p=3149817#p3149817"]Практика - критерий истины. Исчерпывающее предоставление[/uquote]
Если про критерий истины то пожалуйста в личку. :))
Вот так он ругается.

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

#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 - ничего не делает т.е. вообще "пустая" Ничего не меняется.
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Вопросы по С/С++ (СИ)

Сообщение uk8amk »

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

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)
{
}
Вот это её реализация

Здесь любой нормальный компилятор материться должен.
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

[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 - это зарезервированное слово языка и именем параметра быть не может, во-вто́рых - тип этого якобы "параметра" указан не полностью... В сюхе, в отличие от плюсов - имя типа структуры типом не является - такштаааа.... © извольте прописать ФИО полностью. Во-третьих - имени структурированного типа там не фигурирует от слова "вапще". ;-)
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
pnp_machinist
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Re: Вопросы по С/С++ (СИ)

Сообщение pnp_machinist »

Не плохо бы увидеть, как слова трансформируете в С код.
Это и будет наглядным проявления вашей истины :)) в этом вопросе.
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так

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

draw_men(&tex_1)
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Вопросы по С/С++ (СИ)

Сообщение Siarzhuk »

[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"]Вызов к примеру так

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

draw_men(&tex_1)
[/uquote]
Не бъётся фактура с предпоследней вашей цитатой - там где "в параметрах вызова адрес одной из полей структуры". Семантика имени функции настаивает на том, что вы желаете передать в функцию указатель типа 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: Вопросы по С/С++ (СИ)

Сообщение pnp_machinist »

Повторюсь. Хорошо бы многословие заменить кодом.
Если не удобно показать на моём примере. Покажите на своём - надеюсь смогу понять. :))
Несколько строк Си гораздо информативнее.
Первое правило , что вы написали содержит слово "эксплуатации", для этого оно годится.
Надеюсь, мы с вами тут другим занимаемся. :))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

[uquote="pnp_machinist",url="/forum/viewtopic.php?p=3150424#p3150424"]Не плохо бы увидеть, как слова трансформируете в С код.
Это и будет наглядным проявления вашей истины :)) в этом вопросе.
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.
Структуру вы видели. Вызов к примеру так

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

draw_men(&tex_1)
[/uquote]

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

draw_men(&tex_1.bi_1);
передача в функцию адреса одного поля структуры. только в структуре у вас каждое поле - это указатель, поэтому тип параметра в функции должен быть char ** - указатель на указатель на символ. если надо просто передать значение этого поля, то тогда тип char * в параметре функции, а вызов просто

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

draw_men(tex_1.bi_1);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
pnp_machinist
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Re: Вопросы по С/С++ (СИ)

Сообщение pnp_machinist »

ARV cпасибо . Это уже руководство к действию. :))
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

опознать старый компилятор

Сообщение paskal »

На работе реанимируют очень старый проект 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 году.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Zhuk72 »

В гугле такое написание прерывания находится у IAR.
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: Вопросы по С/С++ (СИ)

Сообщение paskal »

[uquote="Zhuk72",url="/forum/viewtopic.php?p=3178332#p3178332"]В гугле такое написание прерывания находится у IAR.[/uquote]
Не согласен. Вот как описано в туториале на 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: Вопросы по С/С++ (СИ)

Сообщение Zhuk72 »

Ну это еще и от подключенного компилятора зависит, верно?
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
paskal
Нашел транзистор. Понюхал.
Сообщения: 160
Зарегистрирован: Пн сен 05, 2011 10:03:06
Откуда: Тула

Re: Вопросы по С/С++ (СИ)

Сообщение paskal »

Верно. И я ищу этот компилятор. Мне исходник надо скомпилировать.
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Re: Вопросы по С/С++ (СИ)

Сообщение arkhnchul »

похоже старый 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 скачивания
VoDa321
Родился
Сообщения: 5
Зарегистрирован: Ср сен 06, 2017 21:34:45

Re: Вопросы по С/С++ (СИ)

Сообщение VoDa321 »

Добрый день, ищу схему измерительного прибора на микроконтроллере запрограммированный на Си, т.к это для диплома схема не должна быть из одного микроконтроллера и двух других элементов. Но в поиске таких схем я натыкался только на схемы ,которые запрограммированы на асемблере или в формате hex
Ответить

Вернуться в «Разные вопросы по МК»