- А не встречал ли кто на Али (или еще где) дешевого отладочника для
кручения BLDC мотора микроконтроллером? (на подобии ATAVRMC100)
Хочется поэкспериментировать с безсенсорными алгоритмами, но пока
не хочется под это городить собственную плату. - AlexG(19.09.2020 10:14, dao, полностью)
- Посмотрел Джангирова, на тему предстоящих в США выборов.
Понравилась метафора: "Противостояние консерваторов и либералов это
противопоставление формулы "закон и порядок" формуле "свобода и
справедливость". Cкpипaч(881 знак., 18.09.2020 23:31 - 19.09.2020 10:41, zen, полностью)
- ЦАП то работает, то нет. В чем причина? Kceния(1117 знак., 17.09.2020 03:26, ARM, полностью)
- Вот же от ST пояснение - Alt@ir(18.09.2020 15:02, ссылка)
- В линкере пропишите: lexxx-lexxx(250 знак., 17.09.2020 15:57)
- Приведение к (uint32_t *) доставляет - Vit(17.09.2020 09:17)
- Уже обращала внимание. Кубистам следовало выставить у функции
запуска тип указателя void*, т.к. подставляют туда указатели на
массивы с разной длиной элемента, а длина элемента задается в
параметрах DMA (DAC_ALIGN_8B_R или DAC_ALIGN_12B_R) в зависимости
от выбранной разрядности DAC. А так действительно код выглядит, как
ошибка. - Kceния(17.09.2020 10:41)
- Ставить void* не корректно в данном случае. Дело в том, что у dma в
stm32 есть такой параметр, как "размер транзакции", который может
быть равен 8, 16, 32 бита + есть ещё режим burst. Указатель на
uint32_t в параметрах может быть намеком на реализацию данной
функции. evgeniy1294(177 знак., 17.09.2020 11:30)
- Не поможет. В этом чипе DMA не может работать с этой областью
памяти. - VladislavS.(17.09.2020 13:21)
- Полагаю, что DMA тут ни при чём. Классический пример - memcpy -
намекает, что должен быть void*. - Vit(17.09.2020 11:43)
- Не нужно путать memcpy с копированием по dma, оно по разному
работает. Насколько мне известно, компиляторы умеют оптимизировать
memcpy, чтобы, например, копировать словами, а не байтами. evgeniy1294(67 знак., 17.09.2020 12:00)
- Не понял логики. Именно поскольку DMA может разный размер
транзакции иметь и разную разрядность входных данных, то лучше
void* , а еще лучше const void* , поскольку DAC и из флеша может
брать данные. - Andreas(17.09.2020 12:35)
- Логика в том, что автор функции подразумевает, что транзакция dma
настроена на 32 бита. Указатель на void может, например,
использоваться как указатель на контекст в колбэках. Потому что
автором колбэка являетесь вы, и вся ответственность за корректное приведение типов лежит на
вас, а не на авторе библиотеки. - evgeniy1294(17.09.2020 19:32)
- const void* имеет другой смысл, а именно, функция обязуется не
менять объект по этому указателю. И она таки не меняет, так что да,
можно добавить const. - SciFi(17.09.2020 12:50)
- Не нужно путать работу DMA с заданием формальных и передачей
фактических параметров в функцию. Сначала должно работать без
всяких оптимизаций. И если дальше кастится по-разному, да ещё и
аппаратное прибитие, то оно по-любому есть место для граблей, но
это не значит, что грабли нужно ещё и на входе расставлять.
HAL-о-строители ещё и, по идее, надеются на годный align, но они ж
смелые - им можно - Vit(17.09.2020 12:21)
- Данные могут быть до сих пор в кеше, а не в оперативке. Поставить
барьер данных пробовали? - lloyd(17.09.2020 09:01)
- Дополню, что там с выравниванием данных по секциям? Можно с ним
"поиграть". - Дoктyp77(17.09.2020 07:20,
)
- На H7, во-первых, могут быть недоступные для DMA области.
Во-вторых, могут быть игры с кешированием. - VladislavS.(17.09.2020 07:18)
- Да, что-то в этом роде, т.к. тот же код работает на STM32F103 и
STM32F407, и только на STM32H743 у DMA пропадает доступ к ОЗУ.
Где-то в нем секьюрити зарыта, которую неясно, как отменить. - Kceния(17.09.2020 07:23)
- Проверила MPU (memory protection unit) - у меня он выключен. - Kceния(17.09.2020 09:11)
- Посмотрите в map-файле в какую SRAM линкер разместил этот массив.
Затем по RM в Table 3. Bus-master-to-bus-slave interconnect
проверьте может ли туда DMA добраться. Я бы с этого начал. - VladislavS.(17.09.2020 08:50)
- У меня одна SRAM - по адресу 0x2000. Да у меня и массивов-то кот
наплакал - 16 байт. - Kceния(17.09.2020 08:52)
- А теперь посмотрите Table 7. Memory map and default device memory
area attributes. 0x2000 это DTCM, до которой у DMA руки коротки
дотянуться. - VladislavS.(17.09.2020 09:26)
- Вот кстати да, в H7 перекроили memory map, классически SRAM идет с
адреса 0x2000'0000, а в H7 c 0x3000'0000. Сразу возникает вопрос,
"как оно туда попало?". Нужно в скрипте линкера смотреть, куда
релоцируется секция data. - evgeniy1294(17.09.2020 11:55)
- Ваша идея была хороша, но к сожалению она не проходит. Загрузчик
(читать память он тоже умеет) показывает наличие RAM лишь в области
0x20000000-0x2001FFFF и нигде больше. Даташит с этим согласен, с
той лишь разницей, что области, обведенные красным контуром,
загрузчик не читает. Кроме того, объем этих областей маловат, чтобы
размещать в них сегмент данных, а тем паче стек. Да и для самого
этого MK даже реклама больше, чем 128К RAM, не обещает. Причем, все
они находятся Kceния(116 знак., 18.09.2020 00:10, картинка)
- Почитать в reference manual про DMA. Предположу, может выравнивание
нужно? - Dingo(17.09.2020 07:11)
- Попробуйте volatile для буфера. - Dead_morose(17.09.2020 06:29)
- Веб-нотификации: Я думаю это интересная тема, и её нужно вынести в отдельный
топик. Я так же прошу кого-то кто разбирается в теме накидать
толковых ссылок (lloyd?) Итак, как работают нотификации в
браузере: fk0(3105 знак., 18.09.2020 12:07, dao, ссылка, ссылка, полностью)
- position independent code ! Вынес в отдельную тему если получится
всем будет полезно! у линкера armlink есть параметры (--fpic и
--bare_metal_pie) Aleksey_75(388 знак., 15.09.2020 15:33, dao, полностью)
- ПОБЕДА! Подробности Aleksey_75(682 знак., 18.09.2020 22:49)
- Фигня полная. В памяти могут быть релоцируемые полуслова, например.
Или хуже того, что-то такое, у чего выравнивание зависит от адреса.
Т.е. условно легло оно на границу кратную 256 -- так и лежит. А
если положили на не кратную -- самоподтягивается вверх до кратной
256. Что будешь делать? Я конечно понимаю, что компилятор генерит
меньшее многообразие, чем позволяет ассемблер, но не полагался
бы... Потому набор релокаций для динамических библиотек сильно уже,
чем для fk0(34 знак., 18.09.2020 23:41)
- При помощи лома и какой-то матери :-) - SciFi(18.09.2020 22:57)
- Угу! Но мне нужно было само понимание, я его получил! Описаний на
этот счет фактически нету! - Aleksey_75(18.09.2020 23:02)
- Такая методика широко известна, для тех кто сталкивался с 8-битными
игрушками прибитыми к полу. Но так же известно, что она
малоприменима на практике. Ещё доисторический M80 в CP/M умел
генерировать таблицу релокаций, причём лучше (чем вот так)...
Вообще я не совсем понимаю, как ты сможешь разделить .text и .data,
в смысле избавиться от фиксированного смещения между ними.
Допустим, ты по адресу понял, что относится к .text, что к .data и
при загрузке каждый сегмент fk0(522 знак., 18.09.2020 23:52, ссылка, ссылка)
- У мну вопрос! либо действительно никто подобным не занимался?? или
просто заподло дать волшебного пенделя в правильном направлении ? - Aleksey_75(17.09.2020 23:12)
- Докладываюсь! Времени сегодня на это не было , пару часиков
поковырял! вроде все понятно , не очень понятно (точнее совсем не
понятно!) по двум Aleksey_75(240 знак., 17.09.2020 12:17, картинка)
- Взять GCC и выкинуть что там у тебя, компилятор проф. уровня. Я не
понимаю чем не устраивает GCC. Кроме "там редактор некрасивый". - fk0(15.09.2020 22:23)
- а можно пример как это делается в GCC ?? я с
DYNAMIC_RELOCATION_TABLE фактически разобрался, осталось понять как
определить что переменная в озу. Прога вписывания новых адресов
получается копеечная - Aleksey_75(15.09.2020 22:26)
- Да, с глобальными и статическими переменными засада в гцц. Andreas(141 знак., 15.09.2020 23:26, ссылка)
- Тебе ж LightElf давал ссылку на загрузчик ELF'ов. Кто у кого
скопипастил я не разобрался, сам разбирайся. Там что-то кода много
накручено, можно проще. В конечном счёте нужно записать в нужное
место flash секцию .text, скопировать .data в ОЗУ (и каждый раз при
старте), занулить .bss, потом пробежаться по таблице релокаций и
пофиксить релокации в .data, потом пробежаться по таблице символов
и зарезолвить неизвестные символы (что модуль вызывает из твоей
программы). Заодно fk0(651 знак., 15.09.2020 22:41, ссылка, ссылка)
- по моему elf тащить в прошу потом парсить занятие неблагодарное,
для фалов (ниже) которые весят 408 байт, а elf весит 2кб! - Aleksey_75(15.09.2020 22:49)
- А как, интересно, такие файлы что-то умудряются делать, ну основное
что им нужно, подумалось -- это же C-библиотека. Какой-нибудь там
strlen() вдруг понадобился. Или хуже того, malloc. Получается тебе
её нужно в основной программе, бутлоадере, иметь, и предоставлять
из неё все возможные функции (а не только нужные самой основной
программе). - fk0(16.09.2020 12:05)
- хотя! кто мешает на уровне make парсить elf и прилепить к проше
свою структуру чего куда пихать, даже макросы можно влупить.. Хм!
завтра если не
побежу побежду разломаю , то займусь этим вариком))) - Aleksey_75(16.09.2020 00:06)
- Где бы найти внятное описание DYNAMIC_RELOCATION_TABLE, пока
методом научного тыка разобрал следующее, сначала идут сдвиги на
адреса используемых в модуле указатели(адреса), в свою очередь
которые содержат адреса вызовов (в пределах модуля)! С переменными
в Озу пока полный тупик! - Aleksey_75(15.09.2020 22:15)
- Это ищите? Dingo(194 знак., 15.09.2020 17:03, ссылка, ссылка)
- gcc нормально компилит с -fpic. Но я небольшие патчи с ним
компилил. - Andreas(15.09.2020 16:08)
- И что, мануал молчит как рыба об лёд? - SciFi(15.09.2020 16:03)
- Красота General(1 знак., 18.09.2020 20:54, SCH, ссылка, картинка, полностью)
- Задумали использовать STM32L010F4. Установил последнюю версию IAR.
Вроде как данный тип контроллера поддерживается, а соответствующего
заголовочного файла нет. Как быть? Спасибо! - Bill(18.09.2020 22:38, ARM, полностью)
- Я всегда интересуюсь чего предлагает "оппозиция" если просто долой
батьку/путина/трампа во имя свободы/демократии/счастья то сразу все
ясно. - PlainUser(12.09.2020 06:26, Off, полностью)Cкpипaч
- Стандартная схема электроного балласта для люм ламп.Полумост , базы
транзисторов к трансформатору.Очень хочется найти способ повысить
частоту с 20 до хотя-бы 100кГц.Чтоб уменьшить яркость , лучше-бы до
нуля. PlainUser(194 знак., 15.09.2020 13:06, SCH, полностью)
- MAX22518 Интересный изолятор - при питании 10ма наружу выдаёт 0.22
мА тока, что позволяет принять два сухих контакта General(1 знак., 18.09.2020 13:50, SCH, ссылка, картинка, полностью)
- Всё, пиздец. Moлoдoй кoллeгa(321 знак., 17.09.2020 20:42, Off, ссылка, ссылка, полностью)VLLV
- Реле Sonoff кто пользовал? Можно на его базе сделать сигнализацию
низкой температуры? Чтобы у человека на мобильном push-сообщение,
если темп-ра низкая? - Cкpипaч(18.09.2020 00:12, Cyber, полностью)
- Где это Лагунов подевался? Утонул в море? Некому свару затеять в
пятницу. - BlackMorda(18.09.2020 13:38, Off, полностью)
- Пикадоводы, есть момент. Мож я ацтал от жызни, а все уже
прошаренные, но, тем не менее. При работе с плэйнами, на нутряных
слоях, возможен косячок. mse homjak(314 знак., 18.09.2020 14:41, SCH, картинка)
- Все западновекторные такие.. POV_(937 знак., 18.09.2020 10:33,
, Off, ссылка, полностью)