Перейти к содержанию
    

"В свете ж вот какое чудо" 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:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя гораздо интереснее бы было этого же добится в основной ветке с помощью директив условной компиляции (#IFDEF и прочее).

Сейчас не могу найти док, но как то читал code style разрабов, они там довольно резко написали, что-то типа "мы используем GCC, если вам нравится другой тулчейн, мучайтесь с портированием сами, мы таким не страдаем".

Что, в целом, разумно, ибо:

1) пора переходить на ГЦЦ

2) если неохота, можно собрать либу в объектник с помощью ГЦЦ и цеплять тем же ИАРом. Я, пожалуй, в свободное время так и поступлю

Изменено пользователем drozel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

непонятно к чему эти рассуждения.

там нет шаблонов готовых проектов Кейл. только и всего. Т.е. чтобы собрать либу (именно либу а не таскать с собой килограмм любимых исходников) - нужно притащить в кейловский проект все что нужно

выясняется что же нужно командой make -n

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

никаких там мифических директив GCC и в помине нету.

и непортируемых фишек а-ля winAVR там не найдете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

никаких там мифических директив GCC и в помине нету.

Возможно,

__attribute__ packed(4)

и множество других - и не директивы GCC, но в ИАРе они не компилируются

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно,

__attribute__ packed(4)

и множество других - и не директивы GCC, но в ИАРе они не компилируются

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

 

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

 

 

А вот про always_inline - кейл его просто игнорирует

Вот асмовые вставки надо пересмотреть, то да.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

А вот про always_inline - кейл его просто игнорирует

Вот асмовые вставки надо пересмотреть, то да.

Ну мы немного про разное думаем)

Я в ответ на это

Странно, что никто еще не сделал расширение для поддержки чего-нибудь еще кроме gcc в рамках исходников проекта

начал мыслить в сторону ИАРа, которым пользуюсь, а вы в сторону кейла, хотя, не спорю, конкретики было больше про кейл.

Кстати, не знал, что он понимает __attribute.

А packed(4) был в одной из вложенных структур в USB

 

Не скажете, что за стиль писать объявлять структуры без typedef у разрабов? Есть какие-то подводные камни?[/code]

Изменено пользователем drozel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не скажете, что за стиль писать объявлять структуры без typedef у разрабов? Есть какие-то подводные камни?[/code]

Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.

Поясните? Вроде, объявлять без struct можно как раз тогда, когда определена она как

typedef struct {
....
}myType_t;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поясните? Вроде, объявлять без 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct.

libopencm3 - это си без плюсов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

libopencm3 - это си без плюсов.

это я с stm32plus перепутал, а в libopencm3 (посмотрел сейчас) конструкция typedef struct присутствует в изрядных количествах.

По большому счёту, объявления typedef struct не являются совершенно необходимыми, можно и без них обойтись, просто писанины чуть больше.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

посмотрел исходники, не впечатлило

Я и не агитирую за неё, просто _моему_ глазу приятнее смотрится, чем куб и иже с ним (структурированность и кодестайл).

Многое я бы реализовал иначе.

Что касается УАРТа, то у меня он свой собственный без каких бы то ни было библиотек, так что ничем помочь не могу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите бывалые, а есть возможность использовать libopencm3 в проекте уже напиленом на HAL, с keil-RTX? сосуществование возможно или вообще никак?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь за вопрос не по теме (ну не совсем по теме), но тут много писали про работу с UART.

Понятно, что передавать проще всего через DMA. А вот с приемом через DMA - проблема, пока решаю ее приемом по прерываниям, что накладно.

 

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

 

В описаниях STM32(f207) не нашел подробностей, может кто подскажет как решается эта проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой смысл работать с UART по DMA, если там скорости никакущие?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...