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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3686489#p3686489"]во-первых, скольки битная не была бы передача, но если нет асинхронного вывода - она проблемы не решает. Ведь метод будет ждать окончания передачи, вместо того, чтобы вернуть управление вызывающей программе для вычисления последующих байтов.
Во-вторых, не только для AVR. Тот же STM32F FIFO для SPI не имеет.[/uquote]
На STM32F1, без FIFO, переключаемся в 16-ти битный режим, отправляем первую порцию, данные попадают в сдвиговый регистр, сразу отправляем еще раз, эти данные оседают в буфере TX, итого при максимальной скорости SPI в запасе есть 64 такта, часто больше, за это время вполне можно подготовить новую порцию данных и SPI при этом будет работать в непрерывном режиме. А ведь есть еще DMA... У F0 и F3, кстати, FIFO уже есть.

[uquote="ARV",url="/forum/viewtopic.php?p=3686501#p3686501"]да вы, батенька, оказывается, злой! :) не окупились, если не считать удовольствия от результата. а удовольствие многого стоит[/uquote]
И на каком же основании удовольствие от написания отладчика для скриптового языка должно перевешивать удовольствие от написания удобной и эффективной либы для работы с портами, которая потом будет использоваться во всех проектах?
Reflector писал(а):все новшества в С++ направлены на парадигму "меньше писать программсту", но никак не на "сделать код понятнее". для меня второе важнее.
Если понятный код можно написать на С, значит его можно написать и на C++, более продвинутые возможности языка не обязательно использовать для усложнения кода. В то же время в С++ есть много мелких улучшений, вряд ли использование 5'000'000 вместо 5000000 сделает для кого-то код менее понятным, или, например, кому плохо от того, что можно в хедере написать:

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

inline int abc = 123;
и это не просто проще, а в некоторых случаях даже работает правильнее раздельного объявления + определения в разных файлах.
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Reflector, Вы, похоже не в теме. Как реализовать асинхнонный вывод по SPI я и так знею. Речь о том, что он в библиотеке Чижова для большинства архитектур асинхронный вывод не реализован, а для некоторых архитектур реализован криво, без возможности одновременного чтения.
DMA при выводе графики на TFT дисплей мало помогает. Речь о том, что выделять в памяти буфер под графический дисплей на МК - непозволительная роскошь. Поэтому намного выгодней кодировать точки с их цветами "на лету", одновременно с выводом по SPI. Особенно это важно при анимации на дисплее.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Reflector писал(а):И на каком же основании удовольствие от написания отладчика для скриптового языка должно перевешивать удовольствие от написания удобной и эффективной либы для работы с портами, которая потом будет использоваться во всех проектах?
ни боже мой! я не говорю, что вы не получите удовольствия от своих либ-портов-шаблонов! но советовать другим... это перебор. я ж никого не убеждаю свои отладчики для своих языков писать! :)))
Reflector писал(а):Если понятный код можно написать на С, значит его можно...
тут ведь вот в чем дело: есть вещи, понятные абсолютно всем. есть вещи, понятные только высоко- и специально-образованным. а есть вещи, которые понятны единицам - гуру. так вот, последние новшества С++ не позволяют их понять, не читая с неделю стандарта и не обсуждая их с другими. а "классика" Си понятна даже школьнику.
я об этом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="ПростоНуб",url="/forum/viewtopic.php?p=3686591#p3686591"]DMA при выводе графики на TFT дисплей мало помогает. Речь о том, что выделять в памяти буфер под графический дисплей на МК - непозволительная роскошь. Поэтому намного выгодней кодировать точки с их цветами "на лету", одновременно с выводом по SPI. Особенно это важно при анимации на дисплее.[/uquote]
У меня так и сделано, весь вывод идет напрямую. На F1 я замеры не делал, но на F0/F3 специально тестил при выводе текста и все упиралось в пропускную способность SPI. Если это будет GUI, то там по сути добавится заливка прямоугольников, рисование линий и, возможно, отрисовка битмапов, это все задачи не сложнее вывода текста и у SPI опять же должны постоянно быть данные для отправки. Заливку можно и при помощи DMA делать, нужно целых 2 байта RAM :) Никакой специальной поддержки асинхронного вывода у меня нет, получил новый цвет, записал в DR, если буфер полон, чуть подождал. Даже не знаю что там у Чижова может быть не так, он что перед записью в DR ждет когда все данные будут отправлены?
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Reflector, в большинстве архитектур у него в коде ожидание завершения отправки и приема, так как сделана единая функция ReadWrite. Write вызывает ее просто игнорируя считываемые данные.
Заливка же - скорее исключение. Например, если надо, чтобы снежинки или капли дождя падали по всему экрану, или шестерни крутились - от заливки толку мало.

Ну и не сравнивайте STM32 с AVR )
Реклама
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Сообщение Trully »

На счет ассемблера для STM32 я пошутил :) Хотя я его неплохо знаю и даже понимаю но именно поэтому и не буду на нем программировать микроконтроллер. Кто читал programming manual на Cortex M7 тот представляет объем инструкций и их разновидностей.
Чето дальше у вас пошла заруба чисто между собой по отвлеченной теме - чья пипка короче :)) Я так понял что кое кто из вас предпочитает не погружаться глубоко в премудрости а использовать сторонние либы даже для такой мелочи как SPI :) Ну уж извините что потревожил своими распросами про внутрянку и тонкости С++. Видимо надо проще - достал сторонние либы как в Ардуино и готово.
to be or not to be = -1
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Сообщение smalcom »

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

освоить вариативные макросы
Кесарю - кесарево. Как только в С "завезут" проверку типов аргументов в макроопределения, пространства имён и типизированные перечисления, то можно будет продолжить разговор. А сейчас это предложение писать программки для начинающих.
или тупо написать руками дрыганье битом
Как и говорил (и в ветке кто-то ещё говорил) мы дискутируем о программировании разного уровня: вы о программках для себя, а некоторым надо писать программы, которые через месяц или год кто-то открывает и не проклинает тебя. Программные модули, которые можно использовать в проектах для разных архитектур МК. И при этом код оптимален. И не надо мудохаться при каждом портировании и переписывать половину проекта.
лямбды (сцуко, так и не понял, нахрена они нужны и что это вообще за дрянь) не окупаются по мозговым затрам, имхо...
Окупается. Всё это окупается как только размер ваших проектов переваливает несколько тысяч строк. А на 10-15 ты радуешься, что когда-то не стал "дрыгать битиками".
Либа Чижова уже устарела, потому так и выглядит.
В этом согласен. Имел в виду, что сам С++ даёт очень мощный инструмент, который для С недоступен. А вариативные шаблоны - классная штука (запоздала конечно лет на сто...). Использую их в подмешиваемых шаблонах, чтобы построить интерфейс периферийного модуля МК. Как по мне, то хорошо на вид получается.
имеют собственные сборщики мусора (даже некоторые реализации STL)
Пихать STL в AVR - надо быть большим оригиналом. Если вы так делаете, то конечно не слушайте моих советов. Меня больше заинтересовало где в мега8 поместится динамическое выделение памяти и сборщик мусора. Хм-м-м-м...

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

avr-g++  -o ... main.o  -mmcu=atmega644pa  
main.cpp:7:18: fatal error: vector: No such file or directory
меня терзают смутные сомненья... х-м-м-м...
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Позвольте вторгнуться в вашу беседу. Я начинающий. Уже делал поделки на АТмеге 16, 8, 162, 168. Для 8 код написал сам. для других делали другие, более компетентные.Решил перенести ранее написанный код (не мной) на другой МК и с немного измененым заданием. Компилятор скачал из нета MikroC версии 2.10 (что было бесплатного) поскольку человек сделал мне программу в этом компиляторе и советовал там и работать.До определённого момента все у меня получалось но все уперлось в оператор goto mesto_1. Причем mesto_1: указанное выше по коду компилятор проглотил. Помогите в синтаксисе этого компилятора
Вложения
что не нравится.png
(65.24 КБ) 324 скачивания
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

А где сама метка находится ? Случайно не вне области видимости оператора goto ?
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Сейчас вставлю текст программы

Добавлено after 8 minutes:
Тонкости еще додумаю, надо чтоб по окончании подпрограммы( void dva() ) , в случае наличия 0 на PIND1 более 0.5 сек программа(не знаю как правильно сказать) перепрыгнула на начало , или (else) шагала дальше.

P.S. протеуса нет. Тоже не бесплатен. Торенты малочисленны и не пропускаются антивирусом. Осваивать некогда.Нескончаемая борьба за выживание.
Вложения
- копия.txt
(3.01 КБ) 177 скачиваний
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Пределы области видимости метки - фигурные скобки. Как у локальных переменных. А Вы вообще пытаетесь прыгнуть в другую функцию.
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Да. Прокатило.Только в пределах текущего void. Спасибо. Где спасибку тыкнуть?
Вложения
sкопия.txt
(1.14 КБ) 145 скачиваний
Модератор
Аватара пользователя
Сообщения: 19101
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

слева есть плюс и минус.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

[uquote="Billi34",url="/forum/viewtopic.php?p=3692332#p3692332"]Помогите в синтаксисе этого компилятора[/uquote]На картинке немного странный код.

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

         while(!PIND.B1)i=0;i<50;//пока Д1 ноль сч считает и в случае переполнения
            {
                Delay_ms(10);i++;//выходит  на начало иначе далее по программе
               }
                 goto mesto_1
Цикл while в данном случае ограничивается точкой с запятой, т. е.

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

while(!PIND.B1)i=0;
Зачем часть кода вынесена в фигурные скобки непонятно. К циклу они отношения не имеют, а путаницу создают.
Для чего в коде i<50; непонятно. Похоже что когда-то был цикл for, но его не совсем удачно заменили на while.
Код можно написать без goto используя цикл.
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Прошу прощения за "тормоза" в ответе. Оператор goto пока отодвигается в использование на неопределённое время ввиду ограниченности перескока. Сейчас код имеет несколько другой вид. Ваши замечания я сегодня опробую. И опишу "выплывшие" нюансы. Странный компилятор-он как человек "устает". Вчера весь день программировал, ясно что не получается, переделывал, снова проверял. Так вот вчера те-же самые команды "выпадали" в ошибки , а сегодня прокатывает. Проверить, на макете, могу только на работе, сейчас детей в школу проводить надо.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Billi34 писал(а):Странный компилято
обычно все проблемы "компилятора" спустя некоторое время объясняются свойствами прокладки между спинкой стула и монитором.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 64
Зарегистрирован: Чт июн 09, 2016 18:24:41

Сообщение Billi34 »

Вах! как смешно! Может Вы не тем занимаетесь? Может Вам к КВНщикам податься?
А по теме всё заработало. И goto применил . Все очень похоже на BASIC. В простейшем применении.
Собутыльник Кота
Аватара пользователя
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Сообщение ПростоНуб »

Billi34, обычный goto работает только в рамках одной функции. Если есть нужна goto в другую функцию, используйте setjmp()/longjmp()
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Billi34",url="/forum/viewtopic.php?p=3693174#p3693174"]А по теме всё заработало. И goto применил . Все очень похоже на BASIC. В простейшем применении.[/uquote]
В си о существовании goto лучше забыть сразу. Это не бейсик.
Я за >20 лет программирования на си и десятках реализованных проектов не использовал goto ни разу(!).
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

jcxz писал(а):В си о существовании goto лучше забыть сразу. Это не бейсик.
Я за >20 лет программирования на си и десятках реализованных проектов не использовал goto ни разу(!).
похоливарим? ;) где-то уже была темка...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Ответить

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