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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

[uquote="Reflector",url="/forum/viewtopic.php?p=3269178#p3269178"][uquote="arkhnchul",url="/forum/viewtopic.php?p=3269167#p3269167"]или нет. Компилятор в общем случае не обязан этого делать[/uquote]
Этот register компилятор скорее всего проигнорит, т.к. в С++17 код с ним уже даже не компилится, а до этого он долго был depricated и игнорировался, потому учитывая общую кодовую базу компиляторов можно ожидать такое поведение и в С, но в том же gсс есть еще другая форма записи, с привязкой к конкретному регистру, вот тот register точно работает.[/uquote]

register это специфичная для компилятора функция. В KEIL (ARMCC) это позволяет использовать переменные именованные конкретным регистром на архитектуре ARM.

Синтаксис register unsigned int My_R0 __asm("r0");

Так же не забываем указывать директиву __inline или __forceinline для встраиваемой функции.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]для чего он введен?[/uquote]
процессоры (и память/конвееры/предсказатели/черти рогатые) могут по-разному работать с переменными разного размера. К примеру, x86 обыкновенно работает с 32-битными числами в целом быстрее, чем с восьмибитными; 16 бит - самые медленные. На amd64 64-битные еще чуть быстрее 32-битных. Если скучно, можете потестировать :dont_know:
определения из gcc с линуксовым libc, x86-64:

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

arkhnchul@arkhost-scow:~$ gcc -E -dM -x c /dev/null | grep -E "INT_FAST[0-9]+_TYPE" | sort
#define __INT_FAST16_TYPE__ long int
#define __INT_FAST32_TYPE__ long int
#define __INT_FAST64_TYPE__ long int
#define __INT_FAST8_TYPE__ signed char
#define __UINT_FAST16_TYPE__ long unsigned int
#define __UINT_FAST32_TYPE__ long unsigned int
#define __UINT_FAST64_TYPE__ long unsigned int
#define __UINT_FAST8_TYPE__ unsigned char
там же, но 32 bit ABI:

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

arkhnchul@arkhost-scow:~$ gcc -m32 -E -dM -x c /dev/null | grep -E "INT_FAST[0-9]+_TYPE" | sort
#define __INT_FAST16_TYPE__ int
#define __INT_FAST32_TYPE__ int
#define __INT_FAST64_TYPE__ long long int
#define __INT_FAST8_TYPE__ signed char
#define __UINT_FAST16_TYPE__ unsigned int
#define __UINT_FAST32_TYPE__ unsigned int
#define __UINT_FAST64_TYPE__ long long unsigned int
#define __UINT_FAST8_TYPE__ unsigned char
[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]я так полагаю, что для тех платформ, где есть разные storage classes, с разным временем доступа, компилятор должен стремиться (очевидно, в зависимости от параметров оптимизации?) подбирать для переменных этих типов наиболее быстрый класс хранения[/uquote]
еще раз - нет, это только тип. Storage class - отдельная сущность.
[uquote="ARV",url="/forum/viewtopic.php?p=3269590#p3269590"]ведь auto - это значит "на усмотрение компилятора"[/uquote]
да, и компилятор стремится запихать любой тип в самую быструю память, какая у него есть.
Oxford писал(а):register это специфичная для компилятора функция.
register это стандартный спецификатор, его обязаны понимать (не выполнять) все компиляторы.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Я и говорю только специфичная функция в зависимости от компилятора, поддержка и реализация на конкретной архитектуре описана в мануале на компилятор.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="uk8amk",url="/forum/viewtopic.php?p=3268855#p3268855"]Я подумал, а нельзя ли включить оптимизацию над этой переменной в обработчиках прерываний и выключить в главном цикле. Всё это затевается чтобы немного сократить время выполнения обработчиков.[/uquote]
На входе в функцию скопировать эту переменную в локальную: uint v = v16;
И при каждом изменении этой переменной внутри функции обновлять сразу обе: v16 = v = <expression>;
Конечно не забывая про размерности и связанные с ними эффекты.
И естественно так можно делать при условии, что данная функция не может быть прервана другой, имеющей внутри записи в данную volatile-переменную. Т.е. - если прерыван-ия (-ие) на время выполнения такого кода запрещены или если данное прерывание имеет наивысший приоритет из всех, где есть записи в данную переменную.
Я везде именно так и работаю с volatile-переменными.

Добавлено after 9 minutes 4 seconds:
[uquote="Reflector",url="/forum/viewtopic.php?p=3269329#p3269329"]F429, работающий на 300MHz (6WS) выдает 2801 тактов при работе из флеша и 3440, для RAM, у которой никаких WS нет...[/uquote]
Сказки рассказываете. Максимальная тактовая ядра для F429 == 180МГц.

Добавлено after 5 minutes 5 seconds:
[uquote="arkhnchul",url="/forum/viewtopic.php?p=3269684#p3269684"]x86 обыкновенно работает с 32-битными числами в целом быстрее, чем с восьмибитными; 16 бит - самые медленные.[/uquote]
Зависит от режима CPU. В 16-битном режиме как раз самыми быстрыми (в среднем) будут 16-битные операции (т.к. отсутствуют префиксы переопределения размера операнда).
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 117
Зарегистрирован: Пн дек 08, 2014 19:45:24
Откуда: Воронеж

Сообщение Голимый »

Частенько (все чаще и чаще) во всяких исходниках встречается записи такого вида: 1000000UL. Что это значит, что это вообще такое, и как с этим бороться?
Трудное детство, стальные игрушки.
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3270402#p3270402"]Сказки рассказываете. Максимальная тактовая ядра для F429 == 180МГц.[/uquote]
Серьезно? Даже на 181 уже работать не будет? :)
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="Голимый",url="/forum/viewtopic.php?p=3271289#p3271289"]Частенько (все чаще и чаще) во всяких исходниках встречается записи такого вида: 1000000UL. Что это значит, что это вообще такое, и как с этим бороться?[/uquote]
это значит, что программист пытается сказать "сия константа типа Unsigned Long". Некоторые (далеко не все) компиляторы его даже поймут.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3271293#p3271293"][uquote="jcxz",url="/forum/viewtopic.php?p=3270402#p3270402"]Сказки рассказываете. Максимальная тактовая ядра для F429 == 180МГц.[/uquote]
Серьезно? Даже на 181 уже работать не будет? :)[/uquote]
Попробуйте открыть даташит.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3271525#p3271525"]Попробуйте открыть даташит.[/uquote]
И я там увижу максимальную скорость на которой способен работать данный мк?
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3271538#p3271538"]И я там увижу максимальную скорость на которой способен работать данный мк?[/uquote]
Очевидно.
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3271544#p3271544"]Очевидно.[/uquote]
Ладно, а обычная рабочая частота тогда какая? Я так понимаю номинальная и максимальная частоты в твоем понимании совпадают?
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3271549#p3271549"]Ладно, а обычная рабочая частота тогда какая? Я так понимаю номинальная и максимальная частоты в твоем понимании совпадают?[/uquote]
Объясните - что такое "обычная" или что такое "номинальная" частота?
Мануалы молчат насчёт "обычных" частот. Очевидно у вас есть какие-то свои мануалы. Поделитесь с общественностью. 8)
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3271629#p3271629"]Объясните - что такое "обычная" или что такое "номинальная" частота?
Мануалы молчат насчёт "обычных" частот. Очевидно у вас есть какие-то свои мануалы. Поделитесь с общественностью. 8)[/uquote]
Все ясно, начинается демагогия :) Зайди на форуме в темы, да хоть про осциллографы на STM32F1/F3/F4 и объясни там людям, что в даташите прописана максимальная частота их F103 - 72MHz, потому на 120MHz он работать никак не может, значит вы все сказки рассказываете :)
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Он работает на 120мгц. Множитель меняйте.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Встал на лапы
Сообщения: 117
Зарегистрирован: Пн дек 08, 2014 19:45:24
Откуда: Воронеж

Сообщение Голимый »

если встречается условие if (byte & 0x80) - что тут с чем сравнивается? Обычно встречается чего-то типа if (a==b), а тут как-то неясно.
Трудное детство, стальные игрушки.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Оператор & в Си - побитовое сравнение.
В данном случае условие выполнится, если старший бит переменной byte будет единицей, на остальные пофиг.
Собутыльник Кота
Аватара пользователя
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Сообщение Z_h_e »

Если результат операции не ноль, значит истина.

Добавлено after 1 minute 15 seconds:
ploop писал(а):Оператор & в Си - побитовое сравнение.
Вы так запутаете человека. & - побитное "И".
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Z_h_e писал(а):Вы так запутаете человека. & - побитное "И".
Побитовое "И" естественно.
Мудрый кот
Сообщения: 1840
Зарегистрирован: Вт авг 15, 2017 10:51:13

Сообщение jcxz »

[uquote="Reflector",url="/forum/viewtopic.php?p=3271653#p3271653"]Все ясно, начинается демагогия :) Зайди на форуме в темы, да хоть про осциллографы на STM32F1/F3/F4 и объясни там людям, что в даташите прописана максимальная частота их F103 - 72MHz, потому на 120MHz он работать никак не может, значит вы все сказки рассказываете :)[/uquote]
Т.е. - вы готовы ответить своими деньгами перед заказчиком, что хоть Вы наплевали на требования документации, но ваше поделие будет стабильно работать во всём температурном диапазоне во всём диапазоне питающих напряжений и в течение всего срока службы изделия?
Производитель чипов не гарантирует, а вы готовы гарантировать??? Ну-ну... :music:
Не сравнивайте своё "поделие", слепленное на коленке в гараже и работающее кое-как от случая к случаю как звёзды сложатся, и реально работающее во всех условиях эксплуатации изделие.
Ответить

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