Jump to content

    

AVI-crak

Участник
  • Content Count

    234
  • Joined

  • Last visited

Everything posted by AVI-crak


  1. Цитата(BVU @ Nov 2 2015, 19:34) А вот с этого момента по подробней пожалуйста! Не указанна явным образом потребность записи в рам память непосредсвенно самим программатором. Есть догадка, что выполняется отладка кода в рам памяти, которой у четвёртой серии достаточно для такого фокуса. http://mcustep.ru/2-stm32-zagruzka-i-vypol...oj-pamyati.html Способ позволяет экономить ресурс флеша, особенно при творческом кризисе. Дык вот, физический доступ к флешу через программатор будет доступно лишь при верном указании нужного файла линкера. Их всего два: для работы из флеша и для работы из рама. Прикол в том что иар ну уж шибко умный, и норовит заюзать файл со свежей датой, даже если он лежит не в папке файла проекта. Сколько не смотрел проектов собранных под иаром - почти всегда отсутствовали файлы модели и линкера, и не спроста.
  2. Виноват файл линкера.
  3. DMA2D в stm32f4хх

    Цитата(SasaVitebsk @ Oct 30 2015, 18:44) На SRAM не прокатит. Любая статика 10нс - ровно в 9 раз быстрее sdram на рандомном чтении, и в два раза быстрее - на линейном. А вот по цене и теплу - всё очень грустно.
  4. Дважды (трижды) сгорел STM32F030k6

    Ошибка в разводке LMR14206. Нельзя рвать землю внешним контуром. Непонятная фигня на одиннадцатой ноге стм-ки, висит ровно под дросселем, ловит всё что можно и нельзя. Не уверен, но может статься что это тоталитарная нога, без верхнего диодика. Про дроссель, не важно чья фирма и какие габариты - важен температурный диапазон. На высокочастотном железе(не феррит) верхняя рабочая температура ограниченна 80С, после чего сердечник стремительно теряет свои качества. Это литые кубики, равномерного цвета. Там применяется изоляция провода, которая легко плавится паяльником. На сборных конструкциях (феррит) может юзаться как высокотемпературный провод, так и быстрый. А у них разное пробивное напряжение. Как правило - 100в и 20в. И угадать можно только одним способом - физическим.
  5. Дважды (трижды) сгорел STM32F030k6

    На платке LMR14206 (3.3В). Подозреваю что дроссель тоже маленький, а ведь у них иногда бывает низкое пробивное напряжение. В двухдиновых магнитолах постоянно горят повышающие стабы на маленьких дросселях, а там всего 16в. Работа LMR14206 об заниженную индуктивность с маленькой добротностью - не предсказуема.
  6. И всё-же прочитайте доку на Bit-band. Для работы через макрос необходимо сначала выделить немножко простой памяти под обычную 32b переменную, из которой потом макрос будет брать по одному биту под имя. Это муторно и неудобно, в какой-то момент можно совершить ошибку со свободным битом, и сношаться с отладчиком долгое время. Макрос нормально работает с физикой, у которой реальный адрес. Но когда флаги создаются в простой памяти в разных местах - следить уже сложно. Я предлагаю переложить всю работу по поиску нужного куска памяти - на линкер, это его первичная обязанность. Кстати, у меня проект на 18 постоянных и 200 с копейкой подгружаемых потоков, на каждую нитку по 8 флагов минимум. Я-б рехнулся с выделением памяти под флаги. А так, я даже не задумываюсь - где они хранятся. Есно для проекта уровня "поморгать светодиодом" - использование моего способа чисто академическое.
  7. Кодtypedef uint32_t __attribute__((section(".bitmap"))) bit; Вы уверенны что смена названия типа переменной лучше макроса? У меня GCC матерится на смену типа.
  8. Цитата(_Pasha @ Oct 16 2015, 14:00) а как мне на этапе компиляции назначить адрес этой области? CODE Bit-band - via a linker. Код для GCC - линкер. xxx_sram/flash.ld MEMORY { ROM (rx) : ORIGIN = 0x08000000, LENGTH = __ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = __ BITRAM (rw) : ORIGIN = 0x22000000, LENGTH = 2048K // - LENGTH(RAM) * 128 } ---- /* SRAM base address in the bit-band region*/ _sramflag = .; sflagadres = ((_sramflag - ORIGIN(RAM)) << 5 ); .flag (NOLOAD): { . += sflagadres; . = ALIGN(4); _sflag = .; KEEP(*(.flag)) . = ALIGN(128); _eflag = .; } > BITRAM _eramflag = ((_eflag - _sflag) >> 5); /* SRAM base address in the bit-band region*/ .bss (NOLOAD): { __bss_start__ = .; . += _eramflag; *(.bss*) *(COMMON) __bss_end__ = .; } > RAM С код. #define _FLAG __attribute__ ((section(".flag"))) Далее по коду С. volatile uint32_t temp_name_flag _FLAG;