|
|
  |
libopencm3, Неплохая либа для кортексов... |
|
|
|
Nov 6 2015, 08:53
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(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?
|
|
|
|
|
Nov 6 2015, 17:32
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Цитата(Ruslan1 @ Nov 6 2015, 12:18)  Хотя гораздо интереснее бы было этого же добится в основной ветке с помощью директив условной компиляции (#IFDEF и прочее). Сейчас не могу найти док, но как то читал code style разрабов, они там довольно резко написали, что-то типа "мы используем GCC, если вам нравится другой тулчейн, мучайтесь с портированием сами, мы таким не страдаем". Что, в целом, разумно, ибо: 1) пора переходить на ГЦЦ 2) если неохота, можно собрать либу в объектник с помощью ГЦЦ и цеплять тем же ИАРом. Я, пожалуй, в свободное время так и поступлю
Сообщение отредактировал drozel - Nov 6 2015, 17:33
|
|
|
|
|
Nov 7 2015, 04:53
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Цитата(_Pasha @ Nov 7 2015, 01:10)  никаких там мифических директив GCC и в помине нету. Возможно, Код __attribute__ packed(4) и множество других - и не директивы GCC, но в ИАРе они не компилируются
|
|
|
|
|
Nov 7 2015, 11:46
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(drozel @ Nov 7 2015, 07:53)  Возможно, Код __attribute__ packed(4) и множество других - и не директивы GCC, но в ИАРе они не компилируются Где там packed(4)? Вот grep'ом прошелся - нигде и близко такого нету __attribute__((packed)) понимается кейлом с полуслова. И при чем тут ИАР если речь про кейл. А вот про always_inline - кейл его просто игнорирует Вот асмовые вставки надо пересмотреть, то да.
|
|
|
|
|
Nov 7 2015, 13:15
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Цитата(_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]
Сообщение отредактировал drozel - Nov 7 2015, 13:17
|
|
|
|
|
Nov 7 2015, 16:20
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650

|
Цитата(SSerge @ Nov 7 2015, 19:55)  Это же плюсы, там структура это тоже класс, никаких typedef не надо, имя структуры можно сразу использовать для объявления переменных и без слова struct. Поясните? Вроде, объявлять без struct можно как раз тогда, когда определена она как Код typedef struct { .... }myType_t;
|
|
|
|
|
Nov 7 2015, 17:55
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(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;
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Nov 7 2015, 18:49
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(AHTOXA @ Nov 8 2015, 01:15)  libopencm3 - это си без плюсов. это я с stm32plus перепутал, а в libopencm3 (посмотрел сейчас) конструкция typedef struct присутствует в изрядных количествах. По большому счёту, объявления typedef struct не являются совершенно необходимыми, можно и без них обойтись, просто писанины чуть больше. Если где-то их не оказалось - это не криминал, тут больше вопрос вопрос о читабельности и единстве стиля.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Nov 9 2015, 10:54
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(megajohn @ Nov 6 2015, 11:08)  посмотрел исходники, не впечатлило Я и не агитирую за неё, просто _моему_ глазу приятнее смотрится, чем куб и иже с ним (структурированность и кодестайл). Многое я бы реализовал иначе. Что касается УАРТа, то у меня он свой собственный без каких бы то ни было библиотек, так что ничем помочь не могу...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Nov 18 2016, 04:44
|
Знающий
   
Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458

|
Извиняюсь за вопрос не по теме (ну не совсем по теме), но тут много писали про работу с UART. Понятно, что передавать проще всего через DMA. А вот с приемом через DMA - проблема, пока решаю ее приемом по прерываниям, что накладно.
Если принимать по DMA, то что будет с ошибками? Что сделает DMA при наличии ошибок типа parity error или frame error? Положит в буфер фуфловое значение или даст ошибку DMA (что неправильно) или пропустит этот байт? Как это определить по данным в буфере DMA или FIFO? Прерывания приемника по ошибке можно сделать, но, при работе по DMA, это мало что даст. Вот если бы в буфер писался бы еще и байт статуса...
В описаниях STM32(f207) не нашел подробностей, может кто подскажет как решается эта проблема?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|