Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: libopencm3
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3, 4
esaulenka
Выложил vector_nvic.c для F4, который генерит питоноскрипт: http://pastebin.com/zRuf7Hth
Должен лежать здесь: LibOpenCM3\lib\stm32\f4\
Эдди
Цитата(drozel @ Oct 13 2015, 11:35) *
Это у Вас в папке или в репе на гитхабе?

Это в директории. Взято с гитхаба, но давно.

Понял, в чем прикол: они переиначили недавно библиотеку. Надо будет обновить, посмотреть — может чего интересного добавили.
Вот где этот файл теперь:
lib/cm3/vector.c
esaulenka
Цитата(drozel @ Oct 12 2015, 20:14) *
А функции работы с периферией? Или все в регистры пишете?


Если б кто-то за меня написал функции работы с периферией именно так, как мне нужно, пользовался бы готовым.
Вот например SPI - меня полностью устраивает реализация STM32tpl от AHTOXA. рекомендую! GPIO там вообще супер-мега удобные.

А изучать (без документации толком на это API) библиотеку смысла нет. Тем более это ж железо - куча не совсем логичных ограничений, завязки друг на друга...

Вот ST'шный таймер, например. Какой смысл в библиотеке, если я в любом случае должен влезть в ref.manual, прочитать про ограничения данного конкретного таймера, рассмотреть страничку с типичным применением (там, кстати, работа описывается в терминах регистров, а совсем не API библиотеки!).

Или вот, ST'шный UART. Флажок RXNEIE включает не только прерывание Rx not empty, но и Rx overrun. Отличная грабля! Только об этом не написано ни в StdLib, ни в Cube.
_Pasha
Цитата(Golikov A. @ Oct 13 2015, 11:39) *
это вы не соглашались что через регистры было бы быстрееsm.gif?

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

Цитата
Если для того, чтобы использовать либу, надо поставить GCC и посмотреть, что делает мейк


я же говорю, Вам не нужен gcc
вам надо запустить make -n
чтобы увидеть, что вызывается и какие файлы компилируются для сборки конкретной либы
потом, покурив список - вставляете его в проект и компиляете.
причем тут ГЦЦ? rolleyes.gif

Дальше.
Документация автогенерируется doxygen
Лично я его терпеть ненавижу sm.gif
но наступил на горло - сгенерил html help с кривыми в некоторых местах ссылками
могу его выложить.
ЗЫ ПДФ - гуано, оглавления нету... да и ссылок битых много.

дальше, могу выложить binutils вытащенные еще из WinAVR
единственный их плюс в том, что они работают. sm.gif

Вот сюда http://sharaga.org/index.php?showtopic=24376
там же квоты большие sm.gif
сейчас чуть занят. в течение суток положу
drozel
Цитата(Эдди @ Oct 13 2015, 15:26) *
Вот где этот файл теперь:
lib/cm3/vector.c

Блин, я ж вроде и этот смотрел. И вправду, то, что мне надо
Цитата(esaulenka @ Oct 13 2015, 15:04) *
Выложил vector_nvic.c для F4, который генерит питоноскрипт: [url="http://electronix.ru/redirect.php?

Спасибо) Ну вот, силами сообщества заставил либу пахать без stdlib))

Цитата(_Pasha @ Oct 13 2015, 15:51) *
я же говорю, Вам не нужен gcc
вам надо запустить make -n

Я полагал, мейк - часть ГЦЦ) Каюсь, позор.
1 черт, навскидку не смог заставить его работать. В какой папке надо быть, чтоб сработал make -n?

Всем спасибо
_Pasha
Цитата(drozel @ Oct 13 2015, 15:02) *
1 черт, навскидку не смог заставить его работать. В какой папке надо быть, чтоб сработал make -n?

1. make должен быть у Вас в путях
2. запускать там, где находится Makefile
drozel
Цитата(Golikov A. @ Oct 13 2015, 14:39) *
это вы не соглашались что через регистры было бы быстрееsm.gif?

Ну так это я раз делаю, а в регистры писать постоянно надо biggrin.gif

Ну конечно, я было подумал, что все соберется)
Я же правильно понимаю, что вот это
Код
#define IRQ_HANDLERS \
    [NVIC_NVIC_WWDG_IRQ] = nvic_wwdg_isr, \
    [NVIC_PVD_IRQ] = pvd_isr, \
    [NVIC_TAMP_STAMP_IRQ] = tamp_stamp_isr, \

инициализация массива с явным указанием индексов?

Не могу найти определения этих индексов.
По идее, где-то должен быть файл примерно такого содержания:
Код
#define NVIC_NVIC_WWDG_IRQ 0
#define NVIC_PVD_IRQ 1

Но я его не вижу. Опять генерация скриптом? Так я даже в скриптах подобного текста не вижу.
--
upd: нагуглил файл, зовется nvic_f4.h
Но в репе его опять нет.

Не, ну после таких либ я уже не так плохо отношусь к желанию писать в регистры biggrin.gif biggrin.gif biggrin.gif

Еще вопрос:
Код
#pragma weak dma2d_isr = blocking_handler

где dma2d_isr потом используется в качестве адреса для заполнения таблицы векторов, а blocking_handler - void функция - это спецификация си или опять какой то прибамбас GCC? Ибо IAR ругается на неопределенный dma2d_isr, а я бы сделал так:
Код
__weak dma2d_isr(void) { blocking_handler();};

хотя, конечно, этот вариант красивее, но не компилится
esaulenka
Цитата(drozel @ Oct 14 2015, 09:38) *
Еще вопрос:
Код
#pragma weak dma2d_isr = blocking_handler

где dma2d_isr потом используется в качестве адреса для заполнения таблицы векторов, а blocking_handler - void функция - это спецификация си или опять какой то прибамбас GCC? Ибо IAR ругается на неопределенный dma2d_isr


Это gcc'шная штука: https://gcc.gnu.org/onlinedocs/gcc/Weak-Pragmas.html
Удобно, но, к сожалению, не совместимо со стандартными компиляторами.
Эдди
Цитата(esaulenka @ Oct 15 2015, 09:27) *
не совместимо со стандартными компиляторами.

Единственный стандартный компилятор — gcc, остальное — говно стороннее!
drozel
Цитата(esaulenka @ Oct 15 2015, 12:27) *
Это gcc'шная штука:

Как ни странно, удалось заставить работать, помогли в соседнем топике
Код
__weak void dma2d_isr(void);
#pragma weak dma2d_isr = blocking_handler
drozel
Подскажите, к чему относится дефайн __ARM_ARCH_7M__?
Вроде написано CM3 or CM4, т.е. для STM32F407 надо дефайнить?
Код
/* Those are defined only on CM3 or CM4 */
#if defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
mantech
Цитата(Эдди @ Oct 15 2015, 11:05) *
Единственный стандартный компилятор — gcc, остальное — говно стороннее!


Ой, ой, ой biggrin.gif Для меня, например, IAR - стандартный компилятор, а gcc - видел я в одном месте...Сколько времени убил на портирование gccшной писанины на иар...
Давайте оставим личные религиозные высказывания такого рода при себе laughing.gif
_Pasha
Цитата(mantech @ Oct 21 2015, 20:22) *
Ой, ой, ой biggrin.gif Для меня, например, IAR - стандартный компилятор

Ві наверное очень богатій человек...
mantech
Цитата(_Pasha @ Oct 21 2015, 20:58) *
Ві наверное очень богатій человек...


К сожалению нет, а может, к счастью biggrin.gif Но инструмент должен быть удобный, а это и есть инструмент для программиста.

Сначала пользовал с таблЭтками, потом купили на фирму.
_Pasha
Цитата(mantech @ Oct 21 2015, 21:06) *
Сначала пользовал с таблЭтками, потом купили на фирму.

ну, они для этого утечки и делают, чтобы люди учились работать на их инструментах. тоже понять можно.
Эдди
Цитата(mantech @ Oct 21 2015, 20:22) *
Для меня, например, IAR - стандартный компилятор, а gcc - видел я в одном месте...

Ох уж эти вендузятники...
mantech
Цитата(Эдди @ Oct 21 2015, 22:20) *
Ох уж эти вендузятники...

Да, да! Именно biggrin.gif Работать надо, используя те программы, которые характеризуются удобством, а не бесплатностью rolleyes.gif

ЗЫ. Сори за оффтоп.
AHTOXA
Цитата(drozel @ Oct 21 2015, 18:10) *
Подскажите, к чему относится дефайн __ARM_ARCH_7M__?
Вроде написано CM3 or CM4, т.е. для STM32F407 надо дефайнить?

Его не надо определять. Надо определить -mcpu (и -mfpu). В зависимости от них компилятор сам выведет __ARM_ARCH_xxx.
drozel
Цитата(AHTOXA @ Oct 22 2015, 09:44) *
Его не надо определять. Надо определить -mcpu (и -mfpu). В зависимости от них компилятор сам выведет __ARM_ARCH_xxx.

Это определяется директивами препроцессора или опять фишка GCC? (У меня тоже IAR=) =
AHTOXA
Эти определения специфичны для gcc. У IAR, вероятно, есть свои ключи для определения архитектуры.
Сергей Борщ
Цитата(drozel @ Oct 22 2015, 06:59) *
Это определяется директивами препроцессора или опять фишка GCC?
Список предопределенных символов есть в описании компилятора IAR. Но доки читать - "это для слабых"?
_Pasha
Цитата(drozel @ Oct 22 2015, 06:59) *
Это определяется директивами препроцессора или опять фишка GCC? (У меня тоже IAR=) =

ну Вы же работаете в "своем" архиудобном иаре, шо ж Вы не знаете, не иаровская ли это часом фишка? biggrin.gif
drozel
Цитата(_Pasha @ Oct 22 2015, 14:33) *
ну Вы же работаете в "своем" архиудобном иаре, шо ж Вы не знаете, не иаровская ли это часом фишка? biggrin.gif

Ну ладно вам, это не я говорил про "архиудобный". Напротив, я использую его, т.к. еще не чувствую себя настолько крутым, чтобы пользоваться GCC. Там жеж все руками надо делать самому. Я только сейчас к этому подхожу.
drozel
Люди, спасите с mass storage (MSC).
Пытаюсь запустить вот этот пример, запускаю, ноль эмоций. Через несколько десятков секунд диск неожиданно появляется в системе, но любые операции с ним вызывают такой же по длительности лаг.
Я даже представить не могу, ЧТО может вызывать лаг длительностью в десятки секунд. Тут мелькали фразы о большом количестве сюрпризов в MSC, может быть, проблема на слуху?
Вывод сниффера после ресета девайса (юзаю HHD Monitoring Studio, если есть что лучше под винду, посоветуйте, плз):
Цитата
033791: Command Block Wrapper (DOWN), 02.11.2015 16:55:20.384 +0.0....$.
Tag: 0x16799b80
LUN: 0x0
Command:
12 00 00 00 24 00
Expect: 0x24
033794: Expected Data Received (UP), 02.11.2015 16:55:20.385 +0.001
Size: 0x24


033796: Command Status Wrapper (UP), 02.11.2015 16:55:20.386 +0.001
Returned Tag: 0x16799b80
Data Residue: 0x24
Status: Command Passed


033797: Command Block Wrapper (DOWN), 02.11.2015 16:55:20.386 +0.0....$.
Tag: 0x117db770
LUN: 0x0
Command:
12 00 00 00 24 00
Expect: 0x24
033800: Expected Data Received (UP), 02.11.2015 16:55:20.388 +0.001
Size: 0x24


033802: Command Status Wrapper (UP), 02.11.2015 16:55:20.389 +0.001
Returned Tag: 0x117db770
Data Residue: 0x24
Status: Command Passed


033803: Command Block Wrapper (DOWN), 02.11.2015 16:55:20.389 +0.0#.......ь.
Tag: 0x160bd010
LUN: 0x0
Command:
23 00 00 00 00 00 00 00 FC 00
Expect: 0xfc
033806: Command Status Wrapper (UP), 02.11.2015 16:55:20.391 +0.001
Returned Tag: 0x160bd010
Data Residue: 0x0
Status: Command Failed
Ruslan1
Подскажите, пожалуйста, эта libopencm3 с компилятором Кейла (uVision) работает нормально? или есть хитрости?
drozel
Цитата(Ruslan1 @ Nov 5 2015, 12:14) *
Подскажите, пожалуйста, эта libopencm3 с компилятором Кейла (uVision) работает нормально? или есть хитрости?

Там много директив от GCC,, кой чего придется поправить, но это работы на час от силы
ViKo
А скажите, друзья, что означает понятие "master" в названии этой библиотеки? Вижу, читая про Git, там тоже проскакивает. Это что-то из Линукса? Release - почему не годится?
Нащупываю "путь самурая" - выводы в CubeMX разбрасывать, заодно и тактовые сигналы прикинуть. А дальше использовать libopencm3. По первому визуальному впечатлению - качественнее Куба. А компилировать буду в Кейле... ну, переделаю, если что не поедет... И поменяю коней - Mercurial на Git.
drozel
Цитата(ViKo @ Nov 6 2015, 01:16) *
Нащупываю "путь самурая"

Вот и я его нащупал) Пока все отлично, доделываю несложный проект с USB CDC.
MSC завести не удалось - проблема, аналогичная пользователю _pasha в начале темы. Он ее так и не победил, пришлось использовать MSC от ST
AHTOXA
Цитата(ViKo @ Nov 6 2015, 00:16) *
А скажите, друзья, что означает понятие "master" в названии этой библиотеки? Вижу, читая про Git, там тоже проскакивает.

Если скачивать архив с гитхаба, то он будет называться master.zip. Это просто название основной ветки в гите. Оно?
ViKo
Цитата(AHTOXA @ Nov 6 2015, 07:02) *
Если скачивать архив с гитхаба, то он будет называться master.zip. Это просто название основной ветки в гите. Оно?

Оно. Только это подтверждение факта, но не объяснение.
Ruslan1
А слабо кому-то завести новый бранч (ветку) на гитхабе для этого проекта, специально для Кейла, и выложить свое? sm.gif
Хотя гораздо интереснее бы было этого же добится в основной ветке с помощью директив условной компиляции (#IFDEF и прочее). Странно, что никто еще не сделал расширение для поддержки чего-нибудь еще кроме gcc в рамках исходников проекта libopencm3, учитывая что многие для себя делают такие "бранчи".
AHTOXA
Цитата(ViKo @ Nov 6 2015, 10:32) *
Оно. Только это подтверждение факта, но не объяснение.

Вам объяснить, что такое ветка в гите? Или объяснить, что означает ветка master в проекте libopencm3?
megajohn
Цитата(demiurg_spb @ Mar 15 2013, 09:35) *
ИМХО хорошая альтернатива стандартной библиотеке от ST и не только.


посмотрел исходники, не впечатлило. Или не разобрался как реализовать простейшее:
Чтение из UART с таймаутом. С учетом что UARTов четыре штуки.

все функции расчитаны на однопоточную работу
Код
uint16_t usart_recv(uint32_t usart); тупо проверка на наличие данных. Крутиться в цикле ? Нафиг
void usart_wait_recv_ready(uint32_t usart); бесконечный поллинг
uint16_t usart_recv_blocking(uint32_t usart); первая и вторая функция


Очень интересуют либы, заточенные по вытесняющую RTOS
shreck
Цитата(megajohn @ Nov 6 2015, 14:08) *
Очень интересуют либы, заточенные по вытесняющую RTOS

"В свете ж вот какое чудо" stm32plus
Чувак проделал огромную работу. Выглядит прям не либа, а целый фреймворк.
Сам не пробовал.
megajohn
Цитата(shreck @ Nov 6 2015, 11:33) *
"В свете ж вот какое чудо" stm32plus


там нет привязки к RTOS, и нет моего F2

зато интересно посмотреть как на плюсах реализуются те или иные вещи, как к примеру потоки
_Pasha
Цитата(shreck @ Nov 6 2015, 12:33) *
"В свете ж вот какое чудо" stm32plus
Чувак проделал огромную работу. Выглядит прям не либа, а целый фреймворк.
Сам не пробовал.

тоже... ткнулся наугад
Код
/**
  * @brief  Deinitializes the SDIO peripheral registers to their default reset values.
  * @param  None
  * @retval None
  */
void SDIO_DeInit(void)
{
  SDIO->POWER = 0x00000000;
  SDIO->CLKCR = 0x00000000;
  SDIO->ARG = 0x00000000;
  SDIO->CMD = 0x00000000;
  SDIO->DTIMER = 0x00000000;
  SDIO->DLEN = 0x00000000;
  SDIO->DCTRL = 0x00000000;
  SDIO->ICR = 0x00C007FF;
  SDIO->MASK = 0x00000000;
}

и сразу же вопрос: а нафига, если есть RCC? rolleyes.gif
drozel
Цитата(Ruslan1 @ Nov 6 2015, 12:18) *
Хотя гораздо интереснее бы было этого же добится в основной ветке с помощью директив условной компиляции (#IFDEF и прочее).

Сейчас не могу найти док, но как то читал code style разрабов, они там довольно резко написали, что-то типа "мы используем GCC, если вам нравится другой тулчейн, мучайтесь с портированием сами, мы таким не страдаем".
Что, в целом, разумно, ибо:
1) пора переходить на ГЦЦ
2) если неохота, можно собрать либу в объектник с помощью ГЦЦ и цеплять тем же ИАРом. Я, пожалуй, в свободное время так и поступлю
_Pasha
непонятно к чему эти рассуждения.
там нет шаблонов готовых проектов Кейл. только и всего. Т.е. чтобы собрать либу (именно либу а не таскать с собой килограмм любимых исходников) - нужно притащить в кейловский проект все что нужно
выясняется что же нужно командой make -n
мэйк вывалит те команды, которые он собирается выполнять. Оттуда понять, какие файлы куда и сделать один большой мультитаргет, потом собрать все что необходимо в либу - и энджой.
никаких там мифических директив GCC и в помине нету.
и непортируемых фишек а-ля winAVR там не найдете.
drozel
Цитата(_Pasha @ Nov 7 2015, 01:10) *
никаких там мифических директив GCC и в помине нету.

Возможно,
Код
__attribute__ packed(4)
и множество других - и не директивы GCC, но в ИАРе они не компилируются
_Pasha
Цитата(drozel @ Nov 7 2015, 07:53) *
Возможно,
Код
__attribute__ packed(4)
и множество других - и не директивы GCC, но в ИАРе они не компилируются

Где там packed(4)? Вот grep'ом прошелся - нигде и близко такого нету

__attribute__((packed)) понимается кейлом с полуслова. И при чем тут ИАР если речь про кейл.


А вот про always_inline - кейл его просто игнорирует
Вот асмовые вставки надо пересмотреть, то да.
drozel
Цитата(_Pasha @ Nov 7 2015, 17:46) *
Где там packed(4)? Вот grep'ом прошелся - нигде и близко такого нету

__attribute__((packed)) понимается кейлом с полуслова. И при чем тут ИАР если речь про кейл.


А вот про always_inline - кейл его просто игнорирует
Вот асмовые вставки надо пересмотреть, то да.

Ну мы немного про разное думаем)
Я в ответ на это
Цитата(Ruslan1 @ Nov 6 2015, 12:18) *
Странно, что никто еще не сделал расширение для поддержки чего-нибудь еще кроме gcc в рамках исходников проекта

начал мыслить в сторону ИАРа, которым пользуюсь, а вы в сторону кейла, хотя, не спорю, конкретики было больше про кейл.
Кстати, не знал, что он понимает __attribute.
А packed(4) был в одной из вложенных структур в USB

Не скажете, что за стиль писать объявлять структуры без typedef у разрабов? Есть какие-то подводные камни?[/code]
SSerge
Цитата(drozel @ Nov 7 2015, 20:15) *
Не скажете, что за стиль писать объявлять структуры без typedef у разрабов? Есть какие-то подводные камни?[/code]

Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.
drozel
Цитата(SSerge @ Nov 7 2015, 19:55) *
Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.

Поясните? Вроде, объявлять без struct можно как раз тогда, когда определена она как
Код
typedef struct {
....
}myType_t;
SSerge
Цитата(drozel @ Nov 7 2015, 23:20) *
Поясните? Вроде, объявлять без struct можно как раз тогда, когда определена она как

Писал на эту тему недавно:
http://electronix.ru/forum/index.php?s=&am...t&p=1326899
Ваш пример на C++ можно переписать так:
Цитата
struct myType_t{
....
}; //теперь myType_t является именем нового пользовательского типа (класса)

// можно объявить переменную такого типа:
myType_t myVar;
//или указатель на неё
myType_t *myPtr = &myVar;
AHTOXA
Цитата(SSerge @ Nov 7 2015, 18:55) *
Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.

libopencm3 - это си без плюсов.
SSerge
Цитата(AHTOXA @ Nov 8 2015, 01:15) *
libopencm3 - это си без плюсов.

это я с stm32plus перепутал, а в libopencm3 (посмотрел сейчас) конструкция typedef struct присутствует в изрядных количествах.
По большому счёту, объявления typedef struct не являются совершенно необходимыми, можно и без них обойтись, просто писанины чуть больше.
Если где-то их не оказалось - это не криминал, тут больше вопрос вопрос о читабельности и единстве стиля.
demiurg_spb
Цитата(megajohn @ Nov 6 2015, 11:08) *
посмотрел исходники, не впечатлило

Я и не агитирую за неё, просто _моему_ глазу приятнее смотрится, чем куб и иже с ним (структурированность и кодестайл).
Многое я бы реализовал иначе.
Что касается УАРТа, то у меня он свой собственный без каких бы то ни было библиотек, так что ничем помочь не могу...
AlexRayne
Подскажите бывалые, а есть возможность использовать libopencm3 в проекте уже напиленом на HAL, с keil-RTX? сосуществование возможно или вообще никак?
rudy_b
Извиняюсь за вопрос не по теме (ну не совсем по теме), но тут много писали про работу с UART.
Понятно, что передавать проще всего через DMA. А вот с приемом через DMA - проблема, пока решаю ее приемом по прерываниям, что накладно.

Если принимать по DMA, то что будет с ошибками? Что сделает DMA при наличии ошибок типа parity error или frame error? Положит в буфер фуфловое значение или даст ошибку DMA (что неправильно) или пропустит этот байт? Как это определить по данным в буфере DMA или FIFO? Прерывания приемника по ошибке можно сделать, но, при работе по DMA, это мало что даст. Вот если бы в буфер писался бы еще и байт статуса...

В описаниях STM32(f207) не нашел подробностей, может кто подскажет как решается эта проблема?
Эдди
Какой смысл работать с UART по DMA, если там скорости никакущие?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.