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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Сообщение pnp_machinist »

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

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

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

Сообщение 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! ;-)
Реклама
Открыл глаза
Сообщения: 40
Зарегистрирован: Вс окт 21, 2012 17:32:00
Откуда: СССР

Сообщение pnp_machinist »

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

Сообщение 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);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение pnp_machinist »

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

Сообщение Zhuk72 »

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

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

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

Сообщение Zhuk72 »

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

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

Сообщение paskal »

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

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

Сообщение VoDa321 »

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

Сообщение paskal »

[uquote="arkhnchul",url="/forum/viewtopic.php?p=3178887#p3178887"]похоже старый IAR[/uquote]
Ага, спасибо. Нашел 5-й IAR 2000-го года. На нем сходу скомпилировалось без ошибок и предупреждений. А со сборкой - облом. Тот паренек ушлый оказался - сделал пару ссылок на внешние модули чтоб без него пересобрать нельзя было :(
Если бы на станции "Мир" стояли Винды, она бы еще висела и висела...
Друг Кота
Аватара пользователя
Сообщения: 7382
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Немного достаёт новый XC микрочиповский. Особенно, предупреждениями о неявном преобразовании знаковый-беззнаковый. Вот такая строчка:

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

epoch = unixtime + (3600ul * (timezone + (flag.dst ? 1u : 0u)));
пока все у меня объявлены как беззнаковые проблем нет. Но мне хочется переменную timezone объявить знаковой, так как она может быть и отрицательной. Так вот стоит это сделать, как получаю предупреждение:

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

main.c:421: warning: (373) implicit signed to unsigned conversion
Можно ли сделать, чтобы при отрицательном timezone оно вычиталось бы? Беззнаковость unixtime хотелось бы сохранить - 32 разряда и так еле хватает.
Пока я вижу вариант - делать две ветви для положительного и отрицательного. В одном суммировать, а вдругом вычитать абсолютное беззнаковое значение.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

XC8 V1.38

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

volatile unsigned long   epoch=0, unixtime=0;
volatile signed long     timezone=0;

struct{
    unsigned    dst:1;
}flag;



void main(void){

flag.dst=1;

epoch = unixtime + (3600ul * (timezone + (flag.dst ? 1u : 0u)));


while(1){}
}
Ругани нет :dont_know:

PS: Работоспособность не проверял.

Добавлено after 5 minutes 20 seconds:
Попробуйте такой вариант :

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

epoch = (signed long)unixtime + (3600L * (timezone + (flag.dst ? 1u : 0u)));
Ну а воббще, он правильно ругается. Некоторые части выражения могут быть отрицательными, значение которых оперируется с беззнаковыми переменными.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="uldemir",url="/forum/viewtopic.php?p=3182934#p3182934"]Немного достаёт новый XC микрочиповский. Особенно, предупреждениями о неявном преобразовании знаковый-беззнаковый.[/uquote]
Предупреждает и правильно делает, это довольно распространенный тип ошибок. Например, чему равно -10 + 5U? Ответ 4294967291, хотя компилятор такой код с константами и не пропустит, но если речь идет о переменных и это часть более сложного выражения, то можно получить не самую очевидную ошибку.
Друг Кота
Аватара пользователя
Сообщения: 7382
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Мда. предупреждение, действительно, верное и критичное. Придётся вводить просто флаг запад-восток и делать две ветки.

Я тут на прошлой неделе почитывал MPLAB® XC8 C Compiler User’s Guide - оказывается, занимательнейшее чтиво.

Это началось с какойто из 1.4Х версии: http://radiokot.ru/forum/viewtopic.php? ... 1#p3108891
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

volatile signed long timezone=0;
...
epoch = unixtime + (3600ul * (timezone + (flag.dst ? 1u : 0u)));
строго говоря, в общем случае сдвиг времени в зоне не обязан быть целым часом. Например вот эти:

Asia/Colombo +05:30
Asia/Kathmandu +05:45
Asia/Kolkata +05:30
Australia/Broken_Hill +09:30
Друг Кота
Аватара пользователя
Сообщения: 7382
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Спасибо, я в курсе. Но такая задача не стоит из-за того, что конфигурирование будет через-чур сложным.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку

Сообщение Zhuk72 »

Я тоже недавно вместе с обновлением МПЛаба до четверки и компилятор обновил до 1.43, после чего и полезли эти "имплисит конвершны".
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Контактная информация:
Ответить

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