|
|
  |
давайте делится удобными дефайнами для stm32f10x |
|
|
|
Feb 9 2013, 08:10
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Tahoe @ Feb 9 2013, 01:05)  Использование bitband позволит избавиться от ENTER_CRITICAL()/EXIT_CRITICAL(). Ну и как теперь, выигрыш "просмотрелся"(с) ?  С чего-бы это?? Только разве что в одном конкретном случае - если область, которую надо защитить критической секцией, ограничивается одним словом и только на одну операцию (укладывающуюся в одну команду ASM). Всё то же самое (и даже гораздо больше) решается с помощью LDREX/STREX. Ну-ка реализуйте мне пожалуйста с помощью битбандинга стандартную атомарную операцию CompareAndExchange? А с помощью 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 ног это вроде не должно составлять проблем... Можно даже с помощью макросов сделать это красиво, а-ля: Код //определения пинов: #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)) ...
|
|
|
|
|
Feb 9 2013, 10:23
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(_Pasha @ Feb 9 2013, 10:22)  А в RMW-операциях можно налететь на грабли и по другому - просто записав битик туда, куда не нужно, - помечено как reserved биты, а каким образом оно себя проявить может - хз. Можно. Но я же спросил не о новых проблемах, а о решении конкретной и реально существующей. Так кроме bitband, ещё как-то можно корректно и безопасно сделать ремап? Кстати, даже с bitband тоже не все так просто оказалось, но в итоге решилось.
|
|
|
|
|
Feb 9 2013, 11:02
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Tahoe @ Feb 9 2013, 13:23)  Можно. Но я же спросил не о новых проблемах, а о решении конкретной и реально существующей. Нет там никакой проблемы с ремап... есть временное недопонимание/трактование по своему... Это всё из ряда: Цитата Кстати, даже с bitband тоже не все так просто оказалось, но в итоге решилось.
|
|
|
|
|
Feb 9 2013, 11:23
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(jcxz @ Feb 9 2013, 12:10)  А что - так трудно упаковать номер бита в порту в младшие 5 бит, а номер порта - в старшую часть 32бит? Пока не выпустили корпуса с 2^32 ног это вроде не должно составлять проблем... Можно даже с помощью макросов сделать это красиво, а-ля: Сравните с существующей реализацией: Код if(con->txena) *con->txena = TX_ON; и во что она скомпилируется. Или вот такое: Код WORKLED_bit ^= 1; В этом плане GPIO на bit-band очень удобен. При этом "цена вопроса" - 6кБ в соответствующем регионе!
|
|
|
|
|
Feb 9 2013, 12:47
|
Местный
  
Группа: Свой
Сообщений: 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 были уже установлены. Тот редкий случай, когда получу удовольствие, если меня ткнут носом. Вот только шансов на это нет.
|
|
|
|
|
Feb 9 2013, 14:03
|
Местный
  
Группа: Участник
Сообщений: 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
|
|
|
|
|
Feb 9 2013, 14:23
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(HHIMERA @ Feb 9 2013, 18:03)  И это не считалось проблемой... считалось - решением... С каких пор, вырезание гландов через анус, называется "решением"? И что тогда называть "костылём", если создание фантомного регистра - "решение". Реальное решение, это использовать bit-band. Вот это - действительно решение. А наплодить тонну фантомных регистров, создать прослойку для работы с ними и радоваться, что хоть как-то разрулили аппаратный недостаток... Философия Microchip/Microsoft в действии?  Цитата(HHIMERA @ Feb 9 2013, 18:03)  Сколько налетал на "проблему" в STM32, столько раз сам и убеждался, что просто "не дочитал/не досмотрел/не угадал вариант неоднозначной трактовки"... ИМХО... Вся сложность STM32 - в его простоте... при широких возможностях... Ну вот, опять общие слова - "вы не поняли", "вы не дочитали". Ну а конкретно-то можно? Что именно я "недочитал" и "не понял", касательно работы с AFIO_MAPR_SWJ_CFG? Может наоборот, это вы оба недочитали, раз не используете bit-band, а заводите какую-то левую переменную в памяти? Да чего уж скромничать, продублируем все регистры ядра и периферии в памяти. Вот будет веселье.
|
|
|
|
|
Feb 9 2013, 14:49
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Tahoe @ Feb 9 2013, 17:23)  С каких пор, вырезание гландов через анус, называется "решением"? И что тогда называть "костылём", если создание фантомного регистра - "решение". Реальное решение, это использовать bit-band. Вот это - действительно решение. А наплодить тонну фантомных регистров, создать прослойку для работы с ними и радоваться, что хоть как-то разрулили аппаратный недостаток... Философия Microchip/Microsoft в действии?  Разрулить аппаратный "недостаток" (а для меня это просто факт, особенность регистра, не более) - и есть решение... А постоянно ныть о "проблемах" (которые многие просто, почему-то, и не замечают) - и есть хождение "на костылях"... Цитата Вот будет веселье.  Вот... лучше не надо... веселья... поверьте...
|
|
|
|
|
Feb 9 2013, 14:53
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(HHIMERA @ Feb 9 2013, 18:49)  Разрулить аппаратный "недостаток" (а для меня это просто факт, особенность регистра, не более) - и есть решение... Есть много разных способов избавиться от головной боли. Гильотина - не лучший. Хотя некоторые сочтут его вполне годным. В данном случае, никто не ноет. Есть вариант с bit-band. Это - решение. Все остальное - не решения, а какая-то отрыжка из конца 90-х, с их кривыми PIC-ами.
|
|
|
|
|
Feb 9 2013, 15:13
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Tahoe @ Feb 9 2013, 18:53)  Есть много разных способов избавиться от головной боли. Гильотина - не лучший. Хотя некоторые сочтут его вполне годным. "Проблемы индейцев - вождя не колышат!"(С)... Цитата В данном случае, никто не ноет. Есть вариант с bit-band. Это - решение. Все остальное - не решения, а какая-то отрыжка из конца 90-х, с их кривыми PIC-ами.  "Решение"... или... "праздничный костыль"???
|
|
|
|
|
Feb 9 2013, 15:17
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
не очень понимаю в чем спор то? раньше бит-банда не было, его не хватало, его сделали. Появился инструмент, появился он не просто так, значит он нужен, и его надо использовать. Но с другой стороны и без него решали задачи, в 9 и 7 арме если не ошибаюсь его не было.
Мои проекты вообще далеки от драйверов, операционок и прочих прелестей, я если что-то иничу или ремаплю, то делаю это один раз, и могу выбрать последовательность в которой все пройдет гладко, и могу не заморачиватся с ним. Но и отрицать его и гонятся за ним с крестом тоже не стану%)...
|
|
|
|
|
Feb 9 2013, 15:59
|
Местный
  
Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126

|
Цитата(Golikov A. @ Feb 9 2013, 18:17)  не очень понимаю в чем спор то? Да если честно... я тоже... Нет там никаких проблем с ремапом... ни в каком виде... изначально... всё это надуманно...
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|