Jump to content

    

AVI-crak

Участник
  • Content Count

    251
  • Joined

  • Last visited

Everything posted by AVI-crak


  1. Даже в случае безумного С кода, на асме получается необходимый минимум. В даже если проц не может читать/писать не выровненное - этот кусок он обязан выполнить. ldr r1, =адрес_char mov r3, #0 ldrb r0, [r1], #4 add r3, r3, r0, ldrb r0, [r1], #4 add r3, r3, r0, lsl #8 ldrb r0, [r1], #4 add r3, r3, r0, lsl #16 ldrb r0, [r1], #4 add r3, r3, r0, lsl #24 ldr r1, =адрес_uint32_t str r3, [r1]
  2. Заставили? Наверное проблема в том что промежуточные значения сохраняются в память,вместо того чтобы висеть в регистрах. Хотя для этого ну уж очень сильно постараться нужно, например объявить несколько глобальных переменных в регистрах мк - и превратить чип в реальный тормоз. Решение в лоб - переменная uint32_t - для промежуточных вычислений. И кстати, int - число со знаком равное размеру регистра мк, в этом случае с переносимостью кода будут проблемы, а так-же с простейшим сложением чисел без знака. На С можно любую ересть написать без юзанья int - и этот код будет выполняться на любом процессоре с одинаковым результатом.
  3. Пока не попали на многомиллионный счётчик - переделывайте печатку с мк. Перепрошивка через варт с оптической развязкой, защита всего что смотрит во внешний мир, и так далее. Все важные управляющие ноги должны работать через логику - прохождение сигнала через неё только при особой комбинации состояний на ногах мк. Такой - что не в состоянии возникнуть при переходных процессах мк, и в случае выхода его из строя.
  4. В этом и есть основная проблема. Код для прерывания необходимо писать самому, с минимальным использованием внешних данных. Сами функции в такой системе делятся на два типа - имеющие зависимости и без них. В случае когда в функции есть хотя-бы одна внутренняя или внешняя статическая переменная - последняя считается зависимой. У такой функции есть ограничения при работе в составе ос, и на использование последней в прерываниях. Точнее: применять можно - но только в одном месте. Функции без зависимостей - можно применять бесконечное количество раз одновременно, в том числе и в прерываниях. И неважно сколько у неё входных/выходных параметров, и сколько она в себе несёт вторичных вызовов. Всё аккуратно посчитается и вернётся на свои места. Так-что считаю ошибкой сам код прерывания, а не грабли вокруг него.
  5. Ну, в случае если запуск точности не требует - то можно. Весь смысл - не вылезать из прерывания, а лишь переходить из одного - в другое. Код прерывания разместить в памяти. Не в курсе - но если есть CCRAM - то только там. Только таким способом можно быть 100% уверенным в нулевой латентности событий.
  6. Для начала нужно подумать, чего потом с этими данными делать. Даже не подумать, а просто проверить возможность продуктивной работы с таким массивом данных. Создать на компе очень жирный файл, 64гиг и выше, по желаемому формату. И попытаться с ним работать. Очень быстро придёт понимание, что 99,99% содержимого - вода. Создать файл можно за десять минут, - проверка для вас ничего не стоит.
  7. Это и есть ответ, сбой инициализации sdram. В нормальном состоянии вся область sdram прекрасно читается отладчиком.
  8. Cortex-M7

    Всё верно, 4 бакса на печатку и мелочь, и бакс на чип - это ещё с маржой логистики-продажи. Здесь чип имеет предварительный заказ на фабрике в миллионных количествах: хорошо спланированный, самый дешёвый вариант из всех возможных. По этой причине кремниевая фабрика выставила настолько низкий ценник, что даже после двух-трёхкратного умножения для пользователя ценник останется в пределах бакса. Кстати фирма очень сильно рискует. В случае провала она останется должна производителю кристаллов даже если эти чипы не будут вывезены с фабрики - денежку придётся отдавать, ибо договор's. Гораздо чаще бывает иная ситуация. Готовый отлаженный чип резко кидают в массовое производство. Менеджеры требуют кровь из носу - моментальное изготовление, чтобы так-же быстро скинуть в рынок и возможно - исчезнуть. Именно на таких заказчиках кремниевая фабрика расширяется в буквальном смысле этого слова - покупает новое оборудование, строит новые помещения и так далее. Любой бзык за деньги клиента.
  9. embedded cron

    Да вот фига. Просыпаемся когда уже пора что-то делать, потому как будильник на это время взведён. Иначе смысл в будильнике отпадает, можно на программных таймерах считать, с точностью в миллисекунды. Завёл одну переменную в 64 бита - и железяка её за всю твою жизнь не обнулит.
  10. embedded cron

    Это невозможно на физическом уровне. Ваш мк будет управлять физикой с двумя состояниями - вкл-выкл, ну может быть ещё шим - но у него тоже пишется единственное значение. Значит все эти глюки необходимо разрулить ещё до фактической установки будильника. Функция - будильник каждую секунду - задаётся с некорректными значениями неиспользуемых разрядов будильника. Например каждую секунду - число секунд, а минуты, часы дни - года FFFF. Тогда при установке будильника можно будет задействовать отдельный канал со спец режимом, именно для этих целей, но таких каналов кажись всего один штук. Ну и управление физикой будет очень ограниченным. С этим делом прекрасно справляется программный таймер, там даже ничего изобретать не нужно.
  11. embedded cron

    Кхм, RTC имеет ограниченное количество будильников. При попытке в наглую сделать 10 будильников с разным временем и последовательностью установки - вас ждёт жестокий облом. Тут требуется собственный диспетчер RTC, который будет знать о всех активных будильниках, и устанавливать их по порядку даты. Это можно и без ос сделать, но максимальное количество будильников должно быть ограниченно известным вам числом. Проснулись, прошлись по всем будильникам и нашли минимальное время в + от текущего, установили , далее обработка функции на текущее время, и сон. Добавление будильника - смотрим записи с датой ниже текущей, и юзаем первую-же попавшуюся. Проект собирается без ос, любыми доступными способами.
  12. PWR Расширенная система контроля и управления питанием. Скорей всего срабатывает контроль на понижение напряжения лапы PVD, но при этом нету барьера из двух встречных диодов между аналоговым питанием и силовым. В результате либо аналог либо сила начинает сбоить раньше чем сработает датчик на PVD.
  13. На AllWinner A20 в свободном доступе доков нету, и никогда не будет. Компания предоставляет документацию только в случае крупного заказа, и даже в этом случае они стараются выполнить максимальное количество работы по созданию будущего девайса клиента: это и проектирование печатки, и сборка на заводах компании, и даже портирование ос под свой камень. Клиент оплачивает разработку, заливает свою прошивку, и очень очень сильно делится прибылью с фирмой. Это китайская кухня, с очень специфическими блюдами. И не стоит указывать другим участникам форума - как держать ложку в руках.
  14. Сайт с документацией от производителя - не имеет ни малейшего отношения к российским магазинам. Он даже к китайским клонам не имеет отношения. Реальный вопрос был: ARM32, памяти больше 16к, и флеша больше 64, с ценником меньше бакса за один штук в российском магазине. Потому как купить партию 5000штук я могу без посредников, по цене производителя со скидками и бонусами.
  15. У stm при партиях выше 5000 штук - имеет смысл закупаться напрямую у производителя, минуя многочисленную армию посредников. По габаритам - это небольшой чюмадан, который при определённой сноровке прекрасно пересекает границу. Вот тогда чип от st начинает стоить один бакс, а во всех остальных случаях - 11 баксов. Китайские чипы дают одно громадное преимущество, можно у те-же китайцев заказать и печатку и полный монтаж, и даже корпус!!! И всё это в собранном виде будет стоить копейки, по сравнению с россыпью. С чипом st такой прикол не проходит. Но вот конкретно клонов st - ценников не видно.
  16. Не смог найти активных продаж китайских клонов, наверное это тоже секретно как и у российских чипов.
  17. Фига, режим отладки может и должен сбрасывать флаги при чтении. Потому как реакция флага на чтение/изменение - это выборка его адреса. Стандартная фраза как в поликлинике - "я только спросить" - тут не канает. Закрывайте ветки регистров в отладчике, для того чтобы они не опрашивались, и тогда, возможно, с пятого раза, и десяти перезапусках - оно и заработает.
  18. Не указанна явным образом потребность записи в рам память непосредсвенно самим программатором. Есть догадка, что выполняется отладка кода в рам памяти, которой у четвёртой серии достаточно для такого фокуса. http://mcustep.ru/2-stm32-zagruzka-i-vypol...oj-pamyati.html Способ позволяет экономить ресурс флеша, особенно при творческом кризисе. Дык вот, физический доступ к флешу через программатор будет доступно лишь при верном указании нужного файла линкера. Их всего два: для работы из флеша и для работы из рама. Прикол в том что иар ну уж шибко умный, и норовит заюзать файл со свежей датой, даже если он лежит не в папке файла проекта. Сколько не смотрел проектов собранных под иаром - почти всегда отсутствовали файлы модели и линкера, и не спроста.
  19. Любая статика 10нс - ровно в 9 раз быстрее sdram на рандомном чтении, и в два раза быстрее - на линейном. А вот по цене и теплу - всё очень грустно.
  20. Ошибка в разводке LMR14206. Нельзя рвать землю внешним контуром. Непонятная фигня на одиннадцатой ноге стм-ки, висит ровно под дросселем, ловит всё что можно и нельзя. Не уверен, но может статься что это тоталитарная нога, без верхнего диодика. Про дроссель, не важно чья фирма и какие габариты - важен температурный диапазон. На высокочастотном железе(не феррит) верхняя рабочая температура ограниченна 80С, после чего сердечник стремительно теряет свои качества. Это литые кубики, равномерного цвета. Там применяется изоляция провода, которая легко плавится паяльником. На сборных конструкциях (феррит) может юзаться как высокотемпературный провод, так и быстрый. А у них разное пробивное напряжение. Как правило - 100в и 20в. И угадать можно только одним способом - физическим.
  21. На платке LMR14206 (3.3В). Подозреваю что дроссель тоже маленький, а ведь у них иногда бывает низкое пробивное напряжение. В двухдиновых магнитолах постоянно горят повышающие стабы на маленьких дросселях, а там всего 16в. Работа LMR14206 об заниженную индуктивность с маленькой добротностью - не предсказуема.
  22. И всё-же прочитайте доку на Bit-band. Для работы через макрос необходимо сначала выделить немножко простой памяти под обычную 32b переменную, из которой потом макрос будет брать по одному биту под имя. Это муторно и неудобно, в какой-то момент можно совершить ошибку со свободным битом, и сношаться с отладчиком долгое время. Макрос нормально работает с физикой, у которой реальный адрес. Но когда флаги создаются в простой памяти в разных местах - следить уже сложно. Я предлагаю переложить всю работу по поиску нужного куска памяти - на линкер, это его первичная обязанность. Кстати, у меня проект на 18 постоянных и 200 с копейкой подгружаемых потоков, на каждую нитку по 8 флагов минимум. Я-б рехнулся с выделением памяти под флаги. А так, я даже не задумываюсь - где они хранятся. Есно для проекта уровня "поморгать светодиодом" - использование моего способа чисто академическое.
  23. typedef uint32_t __attribute__((section(".bitmap"))) bit; Вы уверенны что смена названия типа переменной лучше макроса? У меня GCC матерится на смену типа.
  24. 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;