Easyelectronics.ru

Электроника для всех
Текущее время: 25 сен 2020, 22:41

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 05 сен 2017, 22:22 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
Phyzic писал(а):
Эм, вроде вся фишка в том, что в constexpr-функциях в с++11/14 разрешено использование только return-выражения и простых операций, к которым относится всякая математика и тернарный оператор, а в с++17 уже можно городить полноценные constexpr-функции с if-ами и (вроде) циклами. А если речь про if при компиляции, то есть std::conditional и std::enable_if.

Все так, но речь не о constexpr функциях в которых можно использовать if, а о constexpr if который делает всякие enable_if излишними, при значительном упрощении кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 05 сен 2017, 22:38 
Только пришел

Зарегистрирован: 04 сен 2017, 22:09
Сообщения: 6
Понял, интересно, надо почитать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 00:44 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
а вот еще вопрос
как сделать?

вот делаю универсальный класс ADC
хочу иметь возможность раскрывать шаблон с неким массивом пар номер канала + функция
так чтобы раскрытый класс при срабатывании прерывания для каждого канала вызывал соотвествующую функцию и переключал каналы по кругу

как это описать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:05 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
еще вопрос возник

вот здесь пример доступа к данным из флэш, но используется инициализация экземпляра класса с хранением ссылка на данные во флэш в переменной из оперативной памяти
а можно ли как то передать ссылку на данные во флэш как параметр шаблона?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:10 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
axill писал(а):
вот здесь пример доступа к данным из флэш, но используется инициализация экземпляра класса с хранением ссылка на данные во флэш в переменной из оперативной памяти
а можно ли как то передать ссылку на данные во флэш как параметр шаблона?

Если это обычный адрес, то какие проблемы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:20 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
rомпиляторы ругаются:
IAR говорит, что нельзя параметров шаблон передавать ссылку на данные которые не extern
Atmel ругается, что нельзя передавать параметром в шаблон не константную ссылку, хотя она передается как const


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:23 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
Не надо передавать ссылку, передавай адрес.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:26 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
по всякому пробовал
вообще пробовал массив
объявлял его и как массив и как ссылку


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:44 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
Ага, тут та же проблема, что и с volatile, компилятор такие параметры не считает константами... Тогда наверно не получится, придется делать как-то по-другому.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:46 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
пока сделал через макрос - штампую шаблон с вствленным в тело класса отбращением к массиву


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:48 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
Код:
const uint16_t mf52at_10k_0_100_05_data[] = {};

template <uint16_t const * const & data>
class A {
    static uint16_t get() { return data[0]; }
};
typedef A<mf52at_10k_0_100_05_data> nts;


хотя проверьте меня, может я что не так делаю?
здесь ругается так
Цитата:
Error[Pe459]: initialization requiring a temporary or conversion is not allowed


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 18:56 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
Нашел обходной путь, нужно вместо
Код:
const int arr[10];

писать
Код:
int arr[10] __attribute__((section(".text")));

тогда не ругается и адреса действительно указывают на флеш.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 19:18 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
это какой компилятор?
мне нужно решение работающее для трех компиляторов)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 19:19 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
axill писал(а):
это какой компилятор?

gcc


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 19:46 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3459
extern const uint16_t mf52at_10k_0_100_05_data[] = {0,0,0};

template <const uint16_t * data>
class A { static uint16_t get() { return data[0]; } };

typedef A<mf52at_10k_0_100_05_data> nts;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 19:56 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
_pv угу, так работает и я так пробовал после поиска решения в поисковике
но меня смутило - не понимаю какую роль здесь играет extern?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:02 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
_pv писал(а):
/*extern*/ const uint16_t mf52at_10k_0_100_05_data[] = {0,0,0};

template <const uint16_t * data>
class A { static uint16_t get() { return data[0]; } };

Да, так работает, только extern там не нужен, все дело оказалось в const...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:11 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
без extern не работает ни в аьмеле ни IAR/STM8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:17 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
axill писал(а):
без extern не работает ни в аьмеле ни IAR/STM8

А у тебя массив в том же файле, что и шаблонный класс?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:20 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
в том же, но у меня в принципе проекты - один файл
я не пакую проект из множества файлов и инклюжу все сорцы в main
это давно самый удобный способ

получается extern заставляет компилятор считать адрес определенным на момент компиляции?
но это разве стандарт?
нигде не видел такого значения этого слова


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:25 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1272
В общем ситуация следующая: gcc начиная с 6-й версии компилит без extern, но только с ключем -std=c++1z, clang то же самое, но начиная с версии 3.1, т.е. скорее всего тут дело в снятии некоторых ограничений в новых стандартах...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:40 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3459
без extern он вроде как сам указатель не достаточно константным для шаблона считает, так как const в данном случае (const uint16_t mf52at_10k_0_100_05_data[]) относится к тому на что он указывает.

а IAR думаю про С++17 пока ещё ничего не знает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:42 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
Reflector писал(а):
В общем ситуация следующая: gcc начиная с 6-й версии компилит без extern, но только с ключем -std=c++1z, clang то же самое, но начиная с версии 3.1, т.е. скорее всего тут дело в снятии некоторых ограничений в новых стандартах...


gcc без -std=c++11 даже не принимает значения параметров шаблона по умолчанию, эта опция у меня включена и без extern не компилит, пишет нельзя передавать не константное значение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 20:44 
Старожил

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5358
_pv писал(а):
без extern он вроде как сам указатель не достаточно константным для шаблона считает, так как const в данном случае (const uint16_t mf52at_10k_0_100_05_data[]) относится к тому на что он указывает.

а IAR думаю про С++17 пока ещё ничего не знает.


С++17 здесь пока и не нужен
в общем с extern работает как минимум для двух компиляторов
но смущает что фишка похожа на не документированную
смысловая нагрузка extern официально описана другая
здесь видимо побочный эффект, если говорим, что переменная будет использована в других модулях это заставляет компимлятор как то фиксировать адрес


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 06 сен 2017, 21:11 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3459
A template-argument for a non-type, non-template template-parameter shall be one of:
...
the address of an object or function with external linkage
...

про ИАР и С++17 это о
Цитата:
gcc начиная с 6-й версии компилит без extern, но только с ключем -std=c++1z


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11 ... 17  След.


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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB