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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> давайте делится удобными дефайнами для stm32f10x
jcxz
сообщение Feb 9 2013, 08:10
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Tahoe @ Feb 9 2013, 01:05) *
Использование bitband позволит избавиться от ENTER_CRITICAL()/EXIT_CRITICAL(). Ну и как теперь, выигрыш "просмотрелся"(с) ? wink.gif
С чего-бы это?? Только разве что в одном конкретном случае - если область, которую надо защитить критической секцией, ограничивается одним словом и только на одну операцию (укладывающуюся в одну команду ASM).
Всё то же самое (и даже гораздо больше) решается с помощью LDREX/STREX.
Ну-ка реализуйте мне пожалуйста с помощью битбандинга стандартную атомарную операцию CompareAndExchange? laughing.gif
А с помощью LDREX/STREX это делается легко (или с помощью ENTER_CRITICAL()/EXIT_CRITICAL()).

Цитата(_Pasha @ Feb 9 2013, 12:22) *
А в RMW-операциях можно налететь на грабли и по другому - просто записав битик туда, куда не нужно, - помечено как reserved биты, а каким образом оно себя проявить может - хз.
Думаю - вряд-ли. Скорей всего такие биты прочитаются с тем значением, которое туда можно безопасно записывать.

Цитата(adnega @ Feb 9 2013, 13:13) *
Написал библиотеку для работы с UART.
При инициализации передаем адрес бита ножки GPIO, отвечающую за передачу в RS-485.
Как быть теперь? Применить свою виртуальную адресацию битов портов?
По библиотеке для этих целей могу "протащить" лишь одну 32-битную переменную.
А что - так трудно упаковать номер бита в порту в младшие 5 бит, а номер порта - в старшую часть 32бит?
Пока не выпустили корпуса с 2^32 ног это вроде не должно составлять проблем... laughing.gif
Можно даже с помощью макросов сделать это красиво, а-ля:
Код
//определения пинов:
#define PIN_RS485_1_OE  1, 25
#define PIN_RS485_2_OE  0, 26
//
#define RS485init2(..., port, pin) RS485_Init(..., (port) << 5 | (pin))
#define RS485init(..., port_pin) RS485init2(..., port_pin)
void RS485_Init(..., uint pinOE) { ... }
//Вызов:
RS485init(..., PIN_RS485_1_OE);
RS485init(..., PIN_RS485_2_OE);

Если Вам больше нравится именование портов не через 0,1,2..., а через A,B,C,...
то нетрудно выполнить макрозамену:
Код
#define PIN_RS485_1_OE  B, 25
#define PIN_RS485_2_OE  A, 26
//
#define PORTA 0
#define PORTB 1
...
#define concatAB_(a, b) a##b
#define concatAB(a, b) concatAB_(a, b)
#define RS485init2(..., port, pin) RS485_Init(..., concatAB(PORT, port) << 5 | (pin))
...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 10:23
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(_Pasha @ Feb 9 2013, 10:22) *
А в RMW-операциях можно налететь на грабли и по другому - просто записав битик туда, куда не нужно, - помечено как reserved биты, а каким образом оно себя проявить может - хз.

Можно. Но я же спросил не о новых проблемах, а о решении конкретной и реально существующей. Так кроме bitband, ещё как-то можно корректно и безопасно сделать ремап? Кстати, даже с bitband тоже не все так просто оказалось, но в итоге решилось.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 9 2013, 11:02
Сообщение #48


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Tahoe @ Feb 9 2013, 13:23) *
Можно. Но я же спросил не о новых проблемах, а о решении конкретной и реально существующей.

Нет там никакой проблемы с ремап... есть временное недопонимание/трактование по своему...

Это всё из ряда:
Цитата
Кстати, даже с bitband тоже не все так просто оказалось, но в итоге решилось.

Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 9 2013, 11:23
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(jcxz @ Feb 9 2013, 12:10) *
А что - так трудно упаковать номер бита в порту в младшие 5 бит, а номер порта - в старшую часть 32бит?
Пока не выпустили корпуса с 2^32 ног это вроде не должно составлять проблем... laughing.gif
Можно даже с помощью макросов сделать это красиво, а-ля:


Сравните с существующей реализацией:
Код
if(con->txena) *con->txena = TX_ON;

и во что она скомпилируется.

Или вот такое:
Код
WORKLED_bit ^= 1;


В этом плане GPIO на bit-band очень удобен.
При этом "цена вопроса" - 6кБ в соответствующем регионе!
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 12:47
Сообщение #50


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(HHIMERA @ Feb 9 2013, 15:02) *
Нет там никакой проблемы с ремап... есть временное недопонимание/трактование по своему...

Это всё из ряда:

Ребят, что в той ветке, что сейчас, вы оба просто не вникли в суть проблемы. поэтому ее не видите. Придется повторить ещё раз.

Есть регистр AFIO_MAPR, в котором есть три write only бита SWJ_CFG[2:0]. Результат чтения из них - не определен. Как модифицировать произвольный бит этого регистра, сохранив ранее установленные в SWJ_CFG[2:0] значения? Учитывая, что прочитать SWJ_CFG[2:0] невозможно.

Причем это не высосано из пальца, я реально налетел на эту проблему, когда понадобился remap SPI1, а биты SWJ_CFG были уже установлены. Тот редкий случай, когда получу удовольствие, если меня ткнут носом. Вот только шансов на это нет.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 9 2013, 12:52
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



запомнить значение битов в переменной%) в самом начале программы, установить их и не забывать до самого конца. То есть не читать их из регистра, а брать из этой переменной)...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 13:43
Сообщение #52


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Golikov A. @ Feb 9 2013, 16:52) *
запомнить значение битов в переменной%) в самом начале программы, установить их и не забывать до самого конца. То есть не читать их из регистра, а брать из этой переменной)...

Как соорудить костыли, это я и сам догадаюсь. wink.gif Но что тогда делать с драйвером периферии, причем таких драйверов может висеть на одном SPI несколько штук. В каждый из них прописывать этот костыль? Или все-таки использовать bit-band, дабы вообще не трогать SWJ_CFG[2:0]? wink.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 9 2013, 14:03
Сообщение #53


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Tahoe @ Feb 9 2013, 16:47) *
Ребят, что в той ветке, что сейчас, вы оба просто не вникли в суть проблемы. поэтому ее не видите. Придется повторить ещё раз.

Есть регистр AFIO_MAPR, в котором есть три write only бита SWJ_CFG[2:0]. Результат чтения из них - не определен. Как модифицировать произвольный бит этого регистра, сохранив ранее установленные в SWJ_CFG[2:0] значения? Учитывая, что прочитать SWJ_CFG[2:0] невозможно.

А как вы думаете... как боролись с RMW в младших ПИКах, в которых не было регистра LAT ??? Создавали "фантомный" регистр... типа:
Цитата(Golikov A. @ Feb 9 2013, 16:52) *
запомнить значение битов в переменной%)

И это не считалось проблемой... считалось - решением...

Цитата
Причем это не высосано из пальца, я реально налетел на эту проблему, когда понадобился remap SPI1, а биты SWJ_CFG были уже установлены. Тот редкий случай, когда получу удовольствие, если меня ткнут носом. Вот только шансов на это нет.

Сколько налетал на "проблему" в STM32, столько раз сам и убеждался, что просто "не дочитал/не досмотрел/не угадал вариант неоднозначной трактовки"...

ИМХО... Вся сложность STM32 - в его простоте... при широких возможностях...


Сообщение отредактировал HHIMERA - Feb 9 2013, 14:04
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 14:23
Сообщение #54


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(HHIMERA @ Feb 9 2013, 18:03) *
И это не считалось проблемой... считалось - решением...

С каких пор, вырезание гландов через анус, называется "решением"? И что тогда называть "костылём", если создание фантомного регистра - "решение". Реальное решение, это использовать bit-band. Вот это - действительно решение. А наплодить тонну фантомных регистров, создать прослойку для работы с ними и радоваться, что хоть как-то разрулили аппаратный недостаток... Философия Microchip/Microsoft в действии? sm.gif

Цитата(HHIMERA @ Feb 9 2013, 18:03) *
Сколько налетал на "проблему" в STM32, столько раз сам и убеждался, что просто "не дочитал/не досмотрел/не угадал вариант неоднозначной трактовки"...
ИМХО... Вся сложность STM32 - в его простоте... при широких возможностях...

Ну вот, опять общие слова - "вы не поняли", "вы не дочитали". Ну а конкретно-то можно? Что именно я "недочитал" и "не понял", касательно работы с AFIO_MAPR_SWJ_CFG? Может наоборот, это вы оба недочитали, раз не используете bit-band, а заводите какую-то левую переменную в памяти? Да чего уж скромничать, продублируем все регистры ядра и периферии в памяти. Вот будет веселье. biggrin.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 9 2013, 14:49
Сообщение #55


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Tahoe @ Feb 9 2013, 17:23) *
С каких пор, вырезание гландов через анус, называется "решением"? И что тогда называть "костылём", если создание фантомного регистра - "решение". Реальное решение, это использовать bit-band. Вот это - действительно решение. А наплодить тонну фантомных регистров, создать прослойку для работы с ними и радоваться, что хоть как-то разрулили аппаратный недостаток... Философия Microchip/Microsoft в действии? sm.gif

Разрулить аппаратный "недостаток" (а для меня это просто факт, особенность регистра, не более) - и есть решение...
А постоянно ныть о "проблемах" (которые многие просто, почему-то, и не замечают) - и есть хождение "на костылях"...
Цитата
Вот будет веселье. biggrin.gif

Вот... лучше не надо... веселья... поверьте... lol.gif lol.gif
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 14:53
Сообщение #56


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(HHIMERA @ Feb 9 2013, 18:49) *
Разрулить аппаратный "недостаток" (а для меня это просто факт, особенность регистра, не более) - и есть решение...

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

В данном случае, никто не ноет. Есть вариант с bit-band. Это - решение. Все остальное - не решения, а какая-то отрыжка из конца 90-х, с их кривыми PIC-ами. sm.gif
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 9 2013, 15:13
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Tahoe @ Feb 9 2013, 18:53) *
Есть много разных способов избавиться от головной боли. Гильотина - не лучший. Хотя некоторые сочтут его вполне годным.

"Проблемы индейцев - вождя не колышат!"(С)... biggrin.gif
Цитата
В данном случае, никто не ноет. Есть вариант с bit-band. Это - решение. Все остальное - не решения, а какая-то отрыжка из конца 90-х, с их кривыми PIC-ами. sm.gif

"Решение"... или... "праздничный костыль"??? biggrin.gif
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Feb 9 2013, 15:17
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



не очень понимаю в чем спор то?
раньше бит-банда не было, его не хватало, его сделали. Появился инструмент, появился он не просто так, значит он нужен, и его надо использовать.
Но с другой стороны и без него решали задачи, в 9 и 7 арме если не ошибаюсь его не было.

Мои проекты вообще далеки от драйверов, операционок и прочих прелестей, я если что-то иничу или ремаплю, то делаю это один раз, и могу выбрать последовательность в которой все пройдет гладко, и могу не заморачиватся с ним. Но и отрицать его и гонятся за ним с крестом тоже не стану%)...
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Feb 9 2013, 15:58
Сообщение #59


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(HHIMERA @ Feb 9 2013, 19:13) *
"Проблемы индейцев - вождя не колышат!"(С)... biggrin.gif

"Решение"... или... "праздничный костыль"??? biggrin.gif

Понятно. Т.е. нормального решения предложено не будет.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Feb 9 2013, 15:59
Сообщение #60


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(Golikov A. @ Feb 9 2013, 18:17) *
не очень понимаю в чем спор то?

Да если честно... я тоже...
Нет там никаких проблем с ремапом... ни в каком виде... изначально... всё это надуманно...
Go to the top of the page
 
+Quote Post

5 страниц V  « < 2 3 4 5 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:23
Рейтинг@Mail.ru


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