Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт мар 13, 2026 04:52:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 340, , , ...  
Автор Сообщение
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:19:00 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
NStorm, не, разыменовывать и не надо! я не понял из ваших слов, где ожидать указателя на указатель на чар - VladislavS нарисовал пример, и я увидел, что это item должен быть указателем на указатель! а я думал, массив неверно описан.

VladislavS писал(а):
Ух, забористо!
не понял - это хорошо или плохо? ;) ясен пень, с указателми из флеша не так-то просто... но зато в сишном виде красиво, и ОЗУ не тратится :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:26:24 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Ну правильно, вы передавали указатель на указатель. А теперь item сделали таким. Я предложил просто с другой стороны подойти - разыменовывать при передаче.

Тут весь смак как раз во __flash
...
Ух, забористо! Это AVR.

Ну забористо конечно, но варнинг как я понимаю всё-таки из-за неверного типа по указателю был, о чем я говорил и что в моем примере (ссылка на godbolt ранее) я показал в обычном x86_64. Или я что-то не так понял?


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:29:09 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
NStorm писал(а):
теперь item сделали таким. Я предложил просто с другой стороны подойти - разыменовывать при передаче
хм... логично.
то ли уже вообще тупею, то ли просто к вечеру :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:31:26 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
Это ни хорошо, ни плохо, это так еать. И вообще, там не варнинг должен быть, а смачный такой error. ARV, переходите уже на компилятор С++. Можно не пользоваться С++, но одно то что он не пропускает такие вольности с типами уже больше чем ++.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:34:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
нет, не тупею! или не совсем :)

дело в том, что разыменовывание дает не константное значение, которое не попадает на этапе компиляции во флешь

Добавлено after 1 minute 6 seconds:
VladislavS писал(а):
переходите уже на компилятор С++
и не просите! я от его синтаксиса классов (не говоря про шаблоны) просто умираю. уж лучше руками на Си...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:38:37 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
и не просите! я от его синтаксиса классов (не говоря про шаблоны) просто умираю. уж лучше руками на Си...
Вы читать умеете? Не пользуйтесь классами, если не нравится. Он обычный Си более строго компилирует. Уж подобный варнинг для него точно смачный еррор будет.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 22:47:46 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS писал(а):
Вы читать умеете?
нет :))) а как вы догадались?
VladislavS писал(а):
Уж подобный варнинг для него точно смачный еррор будет
и чем это мне помогло бы? вы могли заметить, что и на варнинг я отреагировал вполне адекватно, только не уразумел, в чем беда и где. чем бы мне еррор помог?

поиметь кучу неожиданных проблем при переходе - зачем?! мне и так хорошо. тем более что единственный реальный смысл применять С++ - это как раз классы и шаблоны. но раз от них меня тошнит - то других смыслов нет :)))

классами я в free pascal балуюсь. и шаблонами тоже немножко - хватает :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 23:07:48 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
дело в том, что разыменовывание дает не константное значение, которое не попадает на этапе компиляции во флешь

Ну вроде только указатель попадет в раму, а сама строка во флэше остается. Вы ведь разыменовываете только первый указатель. Если я сам на ночь глядя тупить не начал.
В принципе объявив item как указатель на указатель во флэше, вопрос решен как я понимаю. Ну хотя теперь адрес указателя тоже из флэша загружается.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн апр 27, 2020 23:47:09 
Друг Кота

Карма: 38
Рейтинг сообщений: 623
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
Библиотека оптимизируется под конкретную железку
нэ савсэм.
библиотека оптимизируется под архитектуру, в лучшем случае - под семейство. Дальше уже дело конечного программиста сказать компилятору, чего там его конкретная железка не умеет или чего программист сам не хочет. У gcc, например, есть флаг mno-unaligned-access.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт апр 28, 2020 07:21:17 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
библиотека оптимизируется под архитектуру,
Это я и имел в виду.

в лучшем случае - под семейство.
В случае ARM - под ядро. Как на уровне компилятора, так и на уровне исходного кода библиотек. При такой конкуренции среди компиляторов под ARM иметь неоптимизированные библиотеки непозволительная роскошь.

У gcc, например, есть флаг mno-unaligned-access.
Это не панацея. C/C++ так устроен, что можно заставить компилятор сделать невыровненный доступ. Это грубый косяк, но он всё ещё в библиотеках встречается. Ответственный разработчик встретив такое отправит багрепорт автору.

Это мы говорили про тулчейн. Он должен всё об архитектуре чипа знать. Вон, чуть выше код под AVR был
Код:
const __flash char __flash *strs_pwr[] = {};
Убери одну __flash и код кардинально меняется.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт апр 28, 2020 07:40:58 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS писал(а):
Убери одну __flash и код кардинально меняется
хочется верить, что для ARM код будет вполне рабочим, если предварительно сделать
#define __flash /* */

интересно, каким предопределенным макросом можно отличить arm-gcc от avr-gcc?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт апр 28, 2020 07:50:47 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
интересно, каким предопределенным макросом можно отличить arm-gcc от avr-gcc?
Не только что это ARM и какое конкретно ядро, но ещё и тип и версию компилятора. RTFM.
Пример из моего стартапа
Код:
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION>=6100100)
  #define __KEIL_CODE__
#elif defined(__GNUC__)
  #define __GCC_CODE__
#elif defined(__ICCARM__)
  #define __IAR_CODE__
#elif defined( __CC_ARM ) || defined(__MICROLIB)
  #error "ARMCC v5 and MICROLIB not supported"
#else
  #error "Can't detect compiler"
#endif


Добавлено after 5 minutes 30 seconds:
#define __flash /* */
Какой ужас!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт апр 28, 2020 08:01:05 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2118
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18512
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
VladislavS писал(а):
Какой ужас!
поясните, а то ваш эмоциональный возглас несколько напрягает.
правильнее было бы все это переопределить как-то так:
Код:
#if defined(__AVR__)
#define flash __flash
#elif defined(__ARM__)
#define flash
#else
#error ???
#endif
а затем везде по коду применять вместо __flash уже просто flash
я просто поленился писать сразу :)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 18:08:33 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 863
Откуда: Рязанская область
Рейтинг сообщения: 0
помогите, как правильно написать, ни как не соображу. :facepalm:

так не работает
if(mode==условие){
if(month==1 && day==1 && minute%10==9){бегущая строка;} // новый год
if(month==1 && day==20&& minute%10==9){бегущая строка;} // день рож Сережи
if(month==5 && day==1 && minute%10==9){бегущая строка;} // день рож у мамы
if(month==5 && day==9 && minute%10==9){бегущая строка;} // день победы
if(month==6 && day==26&& minute%10==9){бегущая строка;} // день рож Илюши
if(month==8 && day==13&& minute%10==9){бегущая строка;} // день рож Вани
if(hour==21&&minute==55){бегущая строка;} // пора спать

else disp=показывать часы;
}
так все работает
if(mode==условие){
if (month==1 && day==1 && minute%10==9) {бегущая строка;} // новый год
else disp=показывать часы;}


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 18:40:43 
Собутыльник Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 432
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2562
Рейтинг сообщения: 0
Применяйте более наглядное форматирование кода, тогда и логика работы программы будет лучше прослеживаться.
Спойлер
Код:
if(mode==условие)
{
  if(month==1 && day==1 && minute%10==9){бегущая строка;} // новый год
  if(month==1 && day==20&& minute%10==9){бегущая строка;} // день рож Сережи
  if(month==5 && day==1 && minute%10==9){бегущая строка;} // день рож у мамы
  if(month==5 && day==9 && minute%10==9){бегущая строка;} // день победы
  if(month==6 && day==26&& minute%10==9){бегущая строка;} // день рож Илюши
  if(month==8 && day==13&& minute%10==9){бегущая строка;} // день рож Вани
 
  if(hour==21&&minute==55)
     {бегущая строка;} // пора спать
  else
     disp=показывать часы;
}

if(mode==условие)
{
  if (month==1 && day==1 && minute%10==9)
     {бегущая строка;} // новый год
  else
     disp=показывать часы;
}


Так что-ли хотели?
Спойлер
Код:
if(mode==условие)
{
  if(month==1 && day==1 && minute%10==9){бегущая строка;} // новый год
  else if(month==1 && day==20&& minute%10==9){бегущая строка;} // день рож Сережи
  else if(month==5 && day==1 && minute%10==9){бегущая строка;} // день рож у мамы
  else if(month==5 && day==9 && minute%10==9){бегущая строка;} // день победы
  else if(month==6 && day==26&& minute%10==9){бегущая строка;} // день рож Илюши
  else if(month==8 && day==13&& minute%10==9){бегущая строка;} // день рож Вани
  else if(hour==21&&minute==55){бегущая строка;} // пора спать
  else disp=показывать часы;
}


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 18:48:52 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Serzh2000, потому что else if надо, иначе условие "else disp=показывать часы;" будет срабатывать всегда, когда не срабатывает "if(hour==21&&minute==55){бегущая строка;} // пора спать" только, наплевав на остальные.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 19:04:44 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 863
Откуда: Рязанская область
Рейтинг сообщения: 0
Цитата:
Применяйте более наглядное форматирование кода


if(условие А){
if(условие Б){...;}
if(условие В){...;}
if(условие Г){...;}
else условие Д;
}

нужно что бы было : если условие А верно
проверяем условие Б ,условие В, условие Г ( если одно из них верно бежит строка)
если не одно не верно выполняем else условие Д;

я кавычки не правильно ставлю {} , как правильно?

СпойлерprevDisp=disp; // сохраняем предыдущий дисплей
Serial.print(month);Serial.print(day);Serial.print(minute%10);

if(mode==0){ if(month==1 && day==1 && minute%10==9){disp=dispTabB[second/3];prevTrans=0;} // новый год
if(month==1 && day==20&& minute%10==9){disp=dispTabB[second/3];prevTrans=0;} // день рождения у папы
if(month==5 && day==1 && minute%10==1){disp=dispTabB[second/3];prevTrans=0;} // день рождения у мамы
if(month==5 && day==9 && minute%10==9){disp=dispTabB[second/3];prevTrans=0;} // день победы
if(month==6 && day==26&& minute%10==9){disp=dispTabB[second/3];prevTrans=0;} // день рождения Илюша
if(month==8 && day==13&& minute%10==9){disp=dispTabB[second/3];prevTrans=0;} // день рождения Ваня
if(hour==21&&minute==55) {disp=dispTabB[second/3];prevTrans=0;} // пора спать

else disp=dispTab[second/3];
}
if(mode==1) disp=CLOCKBIG;

if(mode==2){if(hour==21&&minute==55){disp=dispTabMED[second/3];prevTrans=0;}
else disp=dispTab1[second/3];}

if(mode==3) disp=CLOCKMED1;

if(mode==4){ if(month==1 && day==1 && minute%10==9){disp=dispTabANM[second/3];prevTrans=0;} // новый год
if(month==1 && day==20&& minute%10==9){disp=dispTabANM[second/3];prevTrans=0;} // день рождения у папы
if(month==5 && day==1 && minute%10==9 ){disp=dispTabANM[second/3];prevTrans=0;} // день рождения у мамы
if(month==5 && day==9 && minute%10==9){disp=dispTabANM[second/3];prevTrans=0;} // день победы
if(month==6 && day==26&& minute%10==9){disp=dispTabANM[second/3];prevTrans=0;} // день рождения Илюша
if(month==8 && day==13&& minute%10==9){disp=dispTabANM[second/3];prevTrans=0;} // день рождения Ваня
if(hour==21&&minute==55) {disp=dispTabANM[second/3];prevTrans=0;} // пора спать

else disp=dispTab2[second/3];
}
if(mode==5) disp=CLOCK1;

if(mode==6) disp=TEMP;

if(mode==7) disp=CLOCKBIGJMP;



у меня таких условий А несколько...


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 19:08:38 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Цитата:
я кавычки не правильно ставлю {} , как правильно?

Вам же написали как надо - else if, чтобы "если ни одно условие не верно".

Код:
if(условие А){
  if(условие Б){...;}
  else if(условие В){...;}
  else if(условие Г){...;}
  else условие Д;
}


PS: Используйте отступы, а на форуме код свой заключайте в тег code, иначен форматирование съезжает.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт май 01, 2020 19:14:22 
Опытный кот
Аватар пользователя

Карма: 11
Рейтинг сообщений: 79
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 863
Откуда: Рязанская область
Рейтинг сообщения: 0
:))) :beer: :beer: спасибо ! все получилось :beer: :beer:


спасибо


Вернуться наверх
 
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс май 03, 2020 01:50:09 
Грызет канифоль
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 270
Рейтинг сообщения: 0
Написал вот такую убогую програмку:
Код:
#define F_CPU 1000000UL

#define   sclock   PB1
#define sdata   PB2

#define ledpin   PB0

#include <avr/io.h>
#include <util/delay.h>

void setup(void)
   {
   DDRB |= (1 << ledpin)|(1 << sclock)|(1 << sdata);
   }

void hc164send(unsigned char sh_data)
   {
   int i;
   for (i=0; i<8; i++)
      {
      if (sh_data & 0x80)
         {
         PORTB |= (1 << sdata);
         }
      else
         {
         PORTB &= ~(1 << sdata);
         }
      sh_data = sh_data<<1;
      sh_pulse();
      }
   }
void hc164reset(void)
   {
   hc164send(0x00);
   }

void sh_pulse(void)
   {
   PORTB |= (1 << sclock);
   PORTB &= ~(1 << sclock);
   }

void ledflash(void)
   {
   PORTB |= (1 << ledpin);
   _delay_ms(5);
   PORTB &= ~(1 << ledpin);
   _delay_ms(5);
   }

void main(void)
   {
   setup();
   hc164reset();
   unsigned char j = 0x00;
   while(1)
      {
      hc164send(j);
      ledflash();
      j++;
      _delay_ms(300);
      }
   }

И пытаюсь ее скомпилять с помощью AVR-GCC. А он такой мне говорит: мол, конфликт типов в подпрограмме sh_pulse().
Код:
D:\comp\avr8-gnu-toolchain\bin>avr-gcc -Os -mmcu=atmega48 -o d:\avr\hc164.elf d:
\avr\hc164.c
d:\avr\hc164.c:38:6: warning: conflicting types for 'sh_pulse' [enabled by defau
lt]
 void sh_pulse(void)
      ^
d:\avr\hc164.c:30:3: note: previous implicit declaration of 'sh_pulse' was here
   sh_pulse();
   ^

хотя, она ничего не принимает, и ничего не возвращает. Но если заменить void на int, то становится все хорошо. На другие void почему-то не ругается
Почему компилятору не понравилась именно эта подпрограмма?
И еще вопрос: пытался делать это под линуксом (debian 10 x64), там AVR-GCC (установленный через APT) выдает типа:
Код:
/mnt/ntfs_d/avr/hc164.c:13:2: error: 'DDRB' undeclared (first use in this function)
  DDRB |= (1 << ledpin)|(1 << sclock)|(1 << sdata);
  ^
/mnt/ntfs_d/avr/hc164.c:13:2: note: each undeclared identifier is reported only once for
each function it appears in

avr-libs установлен. Файлы *.h физически присутствуют, проверил. Другие файлы (в. т ч с этим DDRB) компилирует. В интернете - пространные рассуждения на 20 страниц по английски.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7704 ]     ... , , , 340, , , ...  

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y