Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Ср июн 21, 2017 06:47:57

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

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

Вс июн 25, 2017 13:52:54

Так то оно так, но вы хотите, чтобы у вопрошавшего порвался мозг от многочисленных связей между функциями? :)) Тем более, что судя по всему, у него и так уже он закипел :)
Там, в его случае - графический дисплей. А в графическом дисплее координаты вывода не задаются однозначно строкой. И если иметь дело с пропорциональными шрифтами (у которых разная ширина символа - ifr и Жшы - разной ширины), не получается подравнять вывод "пробелами" и не получается точно угадать занимаемую строкой ширину. Посему, "печатающая" функция должна хорошо взаимодействовать с модулем растровой графики.
Вдобавок, у ARM-ов встроенные "печатающие" функции тянут за собой капец как много всякого хлама от Newlib, и прежде чем взять стандартную printf, двадцать раз подумаешь - а нужно ли тебе вообще это, чтобы напечатать банальное "Напряжение: 12,4 В, Ток: 7,6 А". Это всё можно сделать самописным методом.

Текст (массив символов) по умолчанию считается signed?

Он считается как const char, а вот как распознается char без явного указания знака (signed или unsigned) - это уже определяется на уровне принятых компилятором условностей. В вашем случае, char считается как signed char, то есть, знаковым однобайтным. Точно так же как и int без явного указания считается signed int.
Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"

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

Вс июн 25, 2017 15:36:51

Чтобы предупреждений в вашем случае не возникало, нужно принудительно привести тип у вашей строки к запрашиваемому функцией типу. Т.е., (unsigned char*)"Hello world"

Спасибо, помогло.

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

Сб июл 22, 2017 00:48:49

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

{

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

}

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

Вс июл 23, 2017 09:07:13

Подскажите как правильно объявить функцию - draw_men.
Вообще то так компилируется и работает. Но однако ругается Keil 5 с stm32.

Практика - критерий истины. Исчерпывающее предоставление материала для размышлений не только экономит время тех, кому предлагаете поразмышлять над вашей проблемой, но и стимулирует их к этому. Ругань - в студию! © :)

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

Вс июл 23, 2017 10:52:39

Практика - критерий истины. Исчерпывающее предоставление

Если про критерий истины то пожалуйста в личку. :))
Вот так он ругается.
Код:
#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 - ничего не делает т.е. вообще "пустая" Ничего не меняется.

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

Вс июл 23, 2017 12:49:48

Код:
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: Вопросы по С/С++ (СИ)

Пн июл 24, 2017 09:03:04

Практика - критерий истины.

Если про критерий истины то пожалуйста в личку. :))

Как предупреждал Приснопамятный - "Приватно - не консультироваю!" :) Но вообще это была отсылка к первому правилу эксплоатации - "Работает - не трогай!".

void draw_men(struct *char,char);

Во-первы́х - char - это зарезервированное слово языка и именем параметра быть не может, во-вто́рых - тип этого якобы "параметра" указан не полностью... В сюхе, в отличие от плюсов - имя типа структуры типом не является - такштаааа.... © извольте прописать ФИО полностью. Во-третьих - имени структурированного типа там не фигурирует от слова "вапще". ;-)

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

Пн июл 24, 2017 11:27:39

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

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

Пн июл 24, 2017 15:00:05

Не плохо бы увидеть, как слова трансформируете в С код. Это и будет наглядным проявления вашей истины

Аксиома "Работает - не трогай" требует доказательства? :-D
Упрощу - как объявлять функцию в параметрах вызова которой адрес одной из переменной структуры.

Ответов стало быть не читаете? Вы были в одном шаге от верного решения проблемы. Хинт: структура здесь не при чём. Важен тип передаваемого параметра. Куда и насколько многомерно он включается - принимающей функции безразлично - она работает либо с копией параметра в стеке, либо по адресу, на который указывает параметр.
Структуру вы видели.

Несогласия с компилятором по поводу синтаксических ошибок - верный признак того, что скоро снова придётся почитать опостылевшую "книжку по Си"™. ;)
Вызов к примеру так
Код:
draw_men(&tex_1)

Не бъётся фактура с предпоследней вашей цитатой - там где "в параметрах вызова адрес одной из полей структуры". Семантика имени функции настаивает на том, что вы желаете передать в функцию указатель типа struct text_menu* на данные собствено объекта, хотя, впрочем, никто не мешает передать туда и указатель на данные поля, типа конечно-же const char*, но в этом случае компилятор либо заставит вас указать какую именно переменную в структуре вы передаёте, либо вы заткнёте его прямым приведением типа указателя и функция будет вынуждена кушать данныe поля .bi_1. В обеих случаях победит умнейший.

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

Пн июл 24, 2017 19:09:22

Повторюсь. Хорошо бы многословие заменить кодом.
Если не удобно показать на моём примере. Покажите на своём - надеюсь смогу понять. :))
Несколько строк Си гораздо информативнее.
Первое правило , что вы написали содержит слово "эксплуатации", для этого оно годится.
Надеюсь, мы с вами тут другим занимаемся. :))

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

Пн июл 24, 2017 19:38:49

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

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

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

Пн июл 24, 2017 19:46:55

ARV cпасибо . Это уже руководство к действию. :))

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

Чт сен 07, 2017 19:52:17

На работе реанимируют очень старый проект 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 году.

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

Чт сен 07, 2017 21:07:26

В гугле такое написание прерывания находится у IAR.

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

Чт сен 07, 2017 21:27:29

В гугле такое написание прерывания находится у IAR.

Не согласен. Вот как описано в туториале на IAR:
Код:
#pragma vector=0xIE0_int /* Symbol defined in I/O header file */
__interrupt void my_interrupt_routine(void)
{
 /* Do something */
}

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

Чт сен 07, 2017 21:29:57

Ну это еще и от подключенного компилятора зависит, верно?

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

Чт сен 07, 2017 22:21:08

Верно. И я ищу этот компилятор. Мне исходник надо скомпилировать.

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

Пт сен 08, 2017 17:02:34

похоже старый 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 KiB) Скачиваний: 381

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

Сб сен 09, 2017 09:26:53

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