Easyelectronics.ru

Электроника для всех
Текущее время: 16 окт 2018, 13:10

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16, 17  След.
Автор Сообщение
 Заголовок сообщения: Re: Унифицированная кросс-платформенная библиотека Си
СообщениеДобавлено: 04 окт 2017, 18:43 
Старожил

Зарегистрирован: 11 сен 2012, 11:19
Сообщения: 5089
Первый в stdint.h второй в stm32xxxx.h
И это редактор не видит хэдеры а не компиль, коли собирается без ошибок.
А редактор может не видеть из-за ваших выкрутасов с плюсами...
Пути к хэдерам в опциях препроцессора прописаны ?


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
dosikus_2 писал(а):
Первый в stdint.h второй в stm32xxxx.h
И это редактор не видит хэдеры а не компиль, коли собирается без ошибок.
А редактор может не видеть из-за ваших выкрутасов с плюсами...
Пути к хэдерам в опциях препроцессора прописаны ?

путь к системным хедерам я конечно не прописывал, keil сам их находит
путь к своим хедерам прописан в настройках проекта

могу еще предположить, что из за того, что хедеры stm32 у меня подключаются условно редактор что то там путает не не включает их
но он так же ругается на имена шаблонов которые описаны в хедерах подключенных через #include безусловно
и более того, ругается на тип который образован через раскрытие шаблона прямо в этом же файле.
в общем ругается много и в основном не в тему
видимо по этой же причине он далеко не все поедлагает в автоподстановках - это даже более важно чем правильные крестики
крестики можно отключить и забыть, а вот без автоподстановок приходится бродить по файлам и делать ручной копи-паст

в этом плане это явно глюки
у atmel studio 7 (которая базирована на visual studio) все это работает четко и без вопросов


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
интересно, а можно описать шаблон функции с Сишным naming convention?


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

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

Нет, разве что у какого-то конкретного компилятора можно будет добавить соответствующий атрибут. У gcc я такого не нашел.


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2382
axill писал(а):
интересно, а можно описать шаблон функции с Сишным naming convention?

Думаю что нет. Хотя бы из тех соображений, что шаблон инстанциируется под конкретные типы параметров шаблона и линкер должен их как-то различать, а значит эта информация должна быть "зашита" в имени которое попадет в объектник.


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
жаль
пока только получается что в качестве хандлеров можно применить шаблонирование в прямую только а IAR указав атрибуты для функции или метода класса

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


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
почему то шаблон работает не так как должен, в методе Init значения psc и arr остаются нулями
не понимаю почему

при этом остальные поля TIM1 в методе Start устанавливаются верно

раскрывается шаблон так:
Код:
typedef Timer1<mcu, 0, 800, 1000> timer1;


Код:
      

      //----------------------------------------------------------------------
      // Timer template class
      //----------------------------------------------------------------------
      template <uint32_t tim_base, IRQn_Type irqn, MCUCommon::APBENR apbenr_n, uint32_t apbenr_mask,
         typename MCU, int freq, uint16_t psc=0, uint16_t arr=0>
      class TimerTmpl : public HandlerData<irqn> {
         protected:
            static constexpr TIM_TypeDef* tim() { return (TIM_TypeDef*)tim_base; }
         public:
         static uint16_t Init(void) {
            if( freq ) {
               // common
               return 0;
            }
            // custom
            tim()->PSC = psc;
            tim()->ARR = arr;

            return MCU::cpu_f / (1 << psc) / arr;
         }
         static void Start(void) {
               // --- allow clocking for TIM16
               *MCUCommon::RegApbEnr(apbenr_n) |= apbenr_mask;
               // --- enable timer with update mode
               tim()->CR1 |= TIM_CR1_CEN | TIM_CR1_URS;
               // --- enable interrupts in update
               tim()->DIER |= TIM_DIER_UIE;
               // --- activate interrupts
               NVIC_EnableIRQ(irqn);
         }
};

   template <typename MCU, int freq, uint16_t psc=0, uint16_t arr=0>
      using Timer1
         = TimerTmpl<TIM1_BASE, TIM1_BRK_UP_TRG_COM_IRQn, MCUCommon::APB2ENR,
         RCC_APB2ENR_TIM1EN, MCU, freq, psc, arr>;



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

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 662
axill писал(а):
почему то шаблон работает не так как должен, в методе Init значения psc и arr остаются нулями
не понимаю почему

Потому что эти регистры буферизируются и обновляются при Update Event или путем выставления бита TIM_EGR_UG, шаблон тут не при чем.
И я бы не стал psc и arr запихивать в шаблон, это параметры которые могут меняться в процессе работы, разумнее их передавать в функцию инициализации.


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
а я вот RCC перенес ДО настройки PSC и ARR и все заработало
может в этом дело?

пока мне хватает заранее заданных параметров
если будет мало то я сделаю комбинированный вариант и в шаблоне и в функции
по идее все операции на этапе компиляции экономят тучу ресурсов, хотя эта привычка от 8-ми биток, не уверен, что релевантно для стм32

а еще если кто про Кейл знает, почему то он при ctrl-F5 при запуске ротладки теперь останавливается не на первой строке main(), а в одном из методов шаблона GPIO
при том, что там нет точек останова. что за глюк?

п.с. Круто, что железо стм32 так унифицированно, что по основным режимам одним шаблоном я реализовал сразу все таймеры


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

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 662
axill писал(а):
а я вот RCC перенес ДО настройки PSC и ARR и все заработало
может в этом дело?

Если имеется в виду включение тактирования таймера, которое у тебя в start(), а до него вызывается init(), то конечно. Но это не значит, что PSC и ARR(как минимум PSC) у тебя сразу правильно инитятся, просто ты этого не замечаешь, т.к. это происходит после первого Update. Писал я как-то функцию частотомера, там задержка в 1 сек, PSC был очень большой, но первый раз всегда меряло неправильно, т.к. если самому не сгенерировать Update, то PSC в этот момент будет равен 0.

Цитата:
пока мне хватает заранее заданных параметров
если будет мало то я сделаю комбинированный вариант и в шаблоне и в функции
по идее все операции на этапе компиляции экономят тучу ресурсов, хотя эта привычка от 8-ми биток, не уверен, что релевантно для стм32

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

Цитата:
п.с. Круто, что железо стм32 так унифицированно, что по основным режимам одним шаблоном я реализовал сразу все таймеры

Если просто считать в одном направлении, то все таймеры одинаковые, но если копнуть глубже, то нюансов довольно много. У меня есть ряд шаблонных классов, типа TimBase, TimMasterMode, TimCapCom1(2/3/4/5/6) и т.д., из которых собираются группы однотипных таймеров и даже в таком случае бывают исключения, таймеры у которых какого-то битика не хватает или режима :)


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

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):
а еще если кто про Кейл знает, почему то он при ctrl-F5 при запуске ротладки теперь останавливается не на первой строке main(), а в одном из методов шаблона GPIO
при том, что там нет точек останова. что за глюк?

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

_________________
Мои поделки
http://www.fun-electronic.net/


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
MasterAlexei писал(а):
Несовпадение отладочных данных на компе и того, что записано в проце. Сделайте полный ребилд, сотрите полностью проц и перезапишите.
Если поможет, покопайтесь в настройках кайла на предмет того, как прошивается проц. Наверняка где то стоит - не прошивать полностью, или не стирать перед прошивкой. Чтото в этом роде.


Спасибо за ответ
Ребилд делал, все остальное стоит по умолчанию
А надо делать полное перезаписыванте с предварительным стиранием?

И еще один момент заметил с кейлом. Сейчас простое приложение - blink.
Заметил, что если сделать просто заливку F8, то светодиод не мигает,
А если запустить отладку ctrl-f5 и после этого сразу выйти из отладки - то мигает
С чем связано?


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

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

Насчет параметров шаблона. В 8ми битрах есть разница на сотню-две байт между вычислениями при компиляции и при исполнении, так как при исполнении 16битная арифметика там это целая подпрограмма. С Stm32f030 разве не так? Или он умеет умножать, но не умеет делить?
Вообще хочу нарисовать логику инициализации таймера по частоте, а не по делителям.
Передаешь желаемую частоту прерываний и psc и arr считаются автоматом
Такую логику для avr8 и stm8 в общем случае голову сломал, но придумать не смог. Там руки связаны, особенно на 8ми битных таймерах. С стм32 все по идее легко, по сути имеем 32битный делитель, можем делить на любое число от 1 до (2^32-1)


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

Зарегистрирован: 15 ноя 2015, 12:11
Сообщения: 112
axill писал(а):
а еще если кто про Кейл знает, почему то он при ctrl-F5 при запуске ротладки теперь останавливается не на первой строке main(), а в одном из методов шаблона GPIO
при том, что там нет точек останова. что за глюк?

В C++ конструкторы глобально определённых объектов вызываются до main() - не ваш случай? Мол отладчик находит первую строчку с соответствием в исходном коде и на ней ждёт дальнейших указаний.


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

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):

Спасибо за ответ
Ребилд делал, все остальное стоит по умолчанию
А надо делать полное перезаписыванте с предварительным стиранием?
[/quote]
Желательно попробовать. Флешь как бы по другому и не пишется кроме как полного затирания страниц и потом их записи. Не знаю, как Кайл, но ИАР вроде как всегда затирает все страницы, которые занимает прога. Зеггеровский прошиватор затирает только те страницы, в которых есть несовпадения, потому и ресурс флеша с Зеггером не так сильно тратится.

axill писал(а):
И еще один момент заметил с кейлом. Сейчас простое приложение - blink.
Заметил, что если сделать просто заливку F8, то светодиод не мигает,
А если запустить отладку ctrl-f5 и после этого сразу выйти из отладки - то мигает
С чем связано?

Ну тут надо смотреть, но попробую предположить что сразу после заливки через F8 не происходит ресет проца, а он так и остается висеть в ресете.
А во втором случае, если выйти из отладки, то обычно проц ресетится, и потому прога стартует как обычно.

_________________
Мои поделки
http://www.fun-electronic.net/


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

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
siarzhuk писал(а):
В C++ конструкторы глобально определённых объектов вызываются до main() - не ваш случай? Мол отладчик находит первую строчку с соответствием в исходном коде и на ней ждёт дальнейших указаний.

Не. В данном случае явный глюк отладчика.
Конструкторы то да, но обычно в настройках отладчика стоит - "после прошивания остановится в начале main и ждать". Либо есть другой пункт - вообще не стартовать прогу. В этом случае должно остановиться прям на первой команде Reset Handler'а. До вызовов вообще чего либо.
А тут именно попахивает несоответствием того, что прошито, с дебажной инфой в объектнике, который загрузили в дебаггер.

_________________
Мои поделки
http://www.fun-electronic.net/


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

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 662
axill писал(а):
Насчет параметров шаблона. В 8ми битрах есть разница на сотню-две байт между вычислениями при компиляции и при исполнении, так как при исполнении 16битная арифметика там это целая подпрограмма.

Разница то есть, но я говорил о том, что в обоих случаях при достаточной оптимизации расчет будет выполнен на стадии компиляции. Компилятор любит константы, твои freq, psc и arr являются константами будучи параметрами шаблона, но они также могут быть константами будучи аргументами функции. Если передашь в Init() три числа и эта функция инлайнится, то вместо выражения "cpu_f / (1 << psc) / arr" компилятор подставит константу. Это обычно дело и вовсе не какая-то особая фишка шаблонов.


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
У меня нет экземпляров класса, так что исполняемый код начинается в main

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

Reflector, чтобы расчет был при компиляции нужно явно инлайнить функцию?
В функцию выносить параметры есть смысл если таймер надо в одной программе настраивать несколько раз. В противном случае без разницы шаблон или функция


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

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):
Подозреваю даже, что после сброса питания мигать не будет, надо проверить

Если так, то вы не прошиваете во флешь, а отладчик заливает прогу в SRAM.
Это устанавливается в скрипте линкера.

_________________
Мои поделки
http://www.fun-electronic.net/


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

Зарегистрирован: 03 сен 2017, 22:47
Сообщения: 20
axill писал(а):
Такую логику для avr8 и stm8 в общем случае голову сломал, но придумать не смог. Там руки связаны, особенно на 8ми битных таймерах.

я это реализовал так:
Код:
typedef TTimer0_SimpleCycle < TTimerValue < 1 > ::ms > Timer_1ms;

для таймера 0 микроконтроллеров AVR, со статической проверкой возможности задания значения
значение можно задавать в MCycles, KCycles, Cycles, MHz, KHz, Hz, ms, us, ns

я вам выше давал пример как это реализовано у меня
https://ru.files.fm/u/cf4jjthd#/list/
файл uC_cpp.7z


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
MasterAlexei писал(а):
axill писал(а):
Подозреваю даже, что после сброса питания мигать не будет, надо проверить

Если так, то вы не прошиваете во флешь, а отладчик заливает прогу в SRAM.
Это устанавливается в скрипте линкера.

Что за скрипт линкера? Настройки проекта все по умолчанию

сброс питания проверил - все работает, в смысле моргает


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

Зарегистрирован: 29 янв 2010, 15:41
Сообщения: 1125
Откуда: Германия
axill писал(а):
сброс питания проверил - все работает, в смысле моргает

Ну значит пишется во флешь.
Еще есть такой интересный финт языка С/С++ - не инициализированные переменные.
Сам на такое напарывался, когда под дебаггером все работало а без дебага - нет. И на оборот.
Так вот - если вы используете переменные, которые вы не инициализировали никак, например
int a;
вместо
int a = 0;
то в первом случае эта перменная может принимать самые разные значения при старте. Дебаг, иногда, сам либо стирает SRAM либо немного портит ее (зависит от дебагера). И получаются разные эффекты.

axill писал(а):
Что за скрипт линкера? Настройки проекта все по умолчанию

Скрипт линкера - это основа основ ембеддед программирования. Рекомендую почитать на эту тему очень внимательно в интернете. Поищите по словам "linker script". И желательно все поумолчательные настройки проверить, и заменить своими, тогда вы будете точно знать, что в вашем проце где лежит, за что отвечает и на что влияет.

_________________
Мои поделки
http://www.fun-electronic.net/


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
возможно ли как то описать шаблон для AVR gcc и STM8S IAR так чтобы с его помощью объявлять переменные в eeprom?

попробовал в лоб написать шаблон с полями данных EEMEM для AVR и __eeprom для STM8 - компилятор дает ошибку
из рабочих решений вижу только два:
- обявлять ручками переменные и оборачивать в шаблог только для описания методов доступа
- внутри шаблона на базе статической переменной в памяти самому в рантайме распределять адреса


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

Зарегистрирован: 03 сен 2017, 22:47
Сообщения: 20
Думаю для доступа удобно будет использовать offsetof()
Код:
//----- Адресное пространство EEPROM -------------------------------------------
#pragma pack(push,1)  // выравнивание структуры в 1 байт
typedef struct
{
  uint8_t   no_use;   // защита eeprom для AVR
  uint8_t   param_1;
  uint16_t  param_2;
  int16_t   param_3;
  uint8_t   param_4[PARAM_4_MAX];
} EData;
#pragma pack(pop)     // отмена выравнивания структуры

#define EDATA_READ(M, D)    EData_Read(offsetof(EData, M), sizeof(((EData *)0)->M), D);
#define EDATA_WRITE(M, D)   EData_Write(offsetof(EData, M), sizeof(((EData *)0)->M), D);

// использование
uint8_t   Param_1;

EDATA_READ(param_1, &Param_1); // считываем из eeprom (поле param_1 структуры Edata) в переменную (Param_1)

Все переменные eeprom размещаются в структуре EData
Надо это всё только обернуть в шаблон


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

Зарегистрирован: 20 мар 2013, 11:27
Сообщения: 5121
как сделать сложно мне не интересно
мне интересно как сделать просто
в идеале хотелось бы что то типа (вне зависимости от компилятора):
Код:
EEPROM<int> param1;


но увы не знаю как так сделать
могу пока только так (IAR):

Код:
__eeprom int e_param1;
EEPROM<int> param1((int*)&e_param1);


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 407 ]  На страницу Пред.  1 ... 12, 13, 14, 15, 16, 17  След.

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


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

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


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

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

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