реклама на сайте
подробности

 
 
> по старой теме C++ и макросы, к теме http://electronix.ru/forum/index.php?showtopic=65654
Zeal0t
сообщение Jan 23 2015, 08:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 28-06-13
Пользователь №: 77 311



Добрый день.
Если кто то использует то что предложил AHTOXA в теме из описания не смогли бы помочь, направить )

Имеем.
- IAR 7.10
- STM32F107
- scmRTOS в стадии изучения
- макросы http://electronix.ru/redirect.php?https://...tongus/stm32tpl

програмка простенькая из примеров. собирается и линкуется без проблем. работает в кристале без ошибок

добавляем классы/макросы для управления пинами.

как объявляем

typedef Pin<'C', 6, 'H'> PC6;
PC6 ledGreen;

как используем

ledGreen.Mode(OUTPUT);
ledGreen.On();

или

PC6::Mode(OUTPUT);
PC6::On();

компиляция - без ошибок и проблем
при линковке получаю

Error[Li005]: no definition for "Pin<(char)67, (int)6, (char)72>::GPIOx" [referenced from W:\Devices\Panel\debug\Obj\main.o]
Error[Li005]: no definition for "Pin<(char)67, (int)6, (char)72>::CRx" [referenced from W:\Devices\Panel\debug\Obj\main.o]

в какую сторону копать? )
спасибо
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
AHTOXA
сообщение Jan 23 2015, 09:11
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Оптимизацию включили?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Zeal0t
сообщение Jan 23 2015, 09:16
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 28-06-13
Пользователь №: 77 311



Цитата(AHTOXA @ Jan 23 2015, 13:11) *
Оптимизацию включили?


Настройки оптимизации из примеров по scmRTOS:

Medium,
Common subexpression elimination
Code motion
Static clustering

p.s.
хм.......
при указании
High/Balanced собирается но не работает. похоже где то во внутренностях ОС виснем (

p.p.s.
уточнение по "High/Balanced собирается но не работает. похоже где то во внутренностях ОС виснем ("
по шагам в отладчике - работает.

p.p.p.s.
"опытным" путем "метод нахождения крайнего" выяснил что на действия линкера влияет опция "Function inlining"
будем копать в этом направлении )


окончательный p.s^4 - все решено/исправленно
вывод: только не бейте - сам виноват )

как было написано для проверки, естественно в спешке лишь бы посмотреть

Код
typedef Pin<'C', 6, 'H'> PC6;
typedef Pin<'C', 7, 'H'> PC7;

PC6 ledGreen;
PC7 ledYellow;

template<>OS_PROCESS void TLed::exec()
{
  RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

  ledGreen.Mode(OUTPUT);
  ledYellow.Mode(OUTPUT);

  FOREVER {
    ledGreen.On();
    ledYellow.On();

    sleep(1000);

    ledGreen.Off();
    ledYellow.Off();
  }
}


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

по поводу файла pin_stm32F1xx.h
в нем есть вот такое

Код
#ifndef INLINE
#define INLINE __attribute__((__always_inline__)) inline
#endif


этот INLINE используется дальше в описаниях. но, насколько я понимаю, это GCC описание. для IAR изменил как

Код
#ifndef INLINE
#define INLINE #pragma inline = forced
#endif


результат - компиляция на всех уровнях оптимизации без ошибок но линковка без ошибок только на уровне High

далее было добавлено:
- в перекрытии оператора "->" в струтуре GPIOx добавлено INLINE
- в перекрытии всех операторов в структуре CRx добавлено INLINE

все компилируется, линкуется, работает на всех уровнях оптимизации.

p.s.end.
2AHTOXA: может пргодится )

всем спасибо за участие )

Сообщение отредактировал Zeal0t - Jan 23 2015, 10:44
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 05:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016