ARV, По вашим советам скачал последнюю микрочип студию и обнаружил что в ней не работает мой отладчик/программатор. Главное в авр студио 7 работает а в новой нет. Подскажите как можно обновить компилятор в 7 студии чтоб работал __flash. Может инструкция какая есть? Еще читал что в IAR есть с коробки, но переходить на новую программу пока не охота
_________________ Одержать сто побед в ста битвах — это не вершина воинского искусства. Повергнуть врага без сражения — вот вершина.
А обязательно "выравнивать" длины union-ов? У меня int - 4 байта (это я в примере лоханулся сгоряча). Хотя, компилятор молча проглотил. Когда я пытался, не додумался поле whereami "вынести" из юниона "за скобки". Хорошо, теперь будем переделывать журнал, чтобы всё теперь записывалось в одну память, а не писалось в два разных места.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
ну так если не хотите, чтобы у вас в одном режиме тупо несколько байтов всегда пустовало, надо выравнивать. потому как память выделяется под наибольший размер элемента юниона.
если у вас int32_t, так и писали бы, ведь int16_t у вас есть... имхо, int в Си - такой же подлый тип, как и char
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Ой, я ленивый. как пересел на ARM так сразу распустился. всюду пользуюсь 32 битной арифметикой. И пользовался только char и int. Всякие int16_t пришлось привыкать чуть позже, когда нужно память (внешнюю) экономить. Внутренней хватает. Да и тексаксовский Code Compose Studio в своём ULP advisor ноет:
Цитата:
#2624-D (ULP 5.4) Detected an assignment to a type with size less than int. To avoid unnecessary sign extension, use int-sized types for local varaibles and convert to smaller types for static storage. commandline.c /Robotic Maze line 178
Но мне там реально нужна 16 битная арифметика, так как там из потока я собираю координаты, которые и передаются в усеченном виде. Да и не появляются эти uint8/16/32_t что-то автоматом - приходится #include "stdint.h" добавлять, если ни один из предыдущих инклюдов его не подцепил.
А мне и надо, чтобы память "пустовала". Чтобы всегда писалось по 23 байта. Сейчас нет с собой платы с FRAM, чтобы проверить, что там пишется. Но это я обязательно проверю. Потому как тут я байты экономлю - у FRAM ёмкость всего 256к и этого хватает только на пол-минуты при таком объёме данных.
uldemir, а сжимать не пробовали на лету? Я просто не знаю ни особенностей изменения этих координат (дельта-кодирование?), ни их распределения (Хаффман?), не требуемой точности при хранении (интерполяция?) ни множества потоков (МДКП?). Но, обычно, такие данные неплохо сжимаются.
Вот если бы мне нечем было бы заняться, то может этим и заморочился бы. Или был бы в МК такой аппаратный модуль. Но модуля нет. И журналирование не самоцель, а инструмент для исследования проблем, возникающих при создании устройства. И потому хочется, чтобы было всё прозрачно. С другой стороны пыжиться, чтобы уместить в два раза больше? У меня полигончик маленький и время прохода (медленное) 25-28 секунд, а быстрый проход 4-5 секунд. Пока этой памяти хватает. И тратить процессорное время на компрессию? Его (времени), возможно, и так не хватает. Хотя, пока что, исследуя данные, не зафиксировал потери времени - все записи идут строго с 2.5мс интервалом без выпадений. С другой стороны выбранный набор данных может поменяться: если я посчитаю, что соответствующий модуль отлажен - какие-то данные могу перестать журналировать, а если начнутся непонятные глюки - придётся добавить "подозреваемых".
И характер данных, из-за проблем, непредсказуем. Вот журналирование выявило, внезапно, что у меня скорость одного мотора почему-то меняет знак на 2-4 отсчета. И пока не могу выяснить, аппаратная проблема, или программная, или журналирования (ведь я скорость вычисляю как 32 битное число, а в журнале пишу обрезанное до 16 бит).
uldemir, Ваше дело, но заморачиваться тут особо нечего, так как все применимые тут алгоритмы сжатия написаны уже до нас и найти их исходники на C или C++ проблем не представляет. А степень сжатия в таких случаях, обычно, не в два раза, а на порядок. Судя по Вашим словам, дельта-кодирование в купе с Хаффманом тут сразу десятикратное сжатие дадут. Ну не может физический объект резко менять свой импульс.
а вот просветите меня на счет шаблонов в С++: можно ли в шаблоне задавать не тип, а константу? ну то есть есть набор классов, отличающихся только тем, что инициализируются они разными значениями констант. нужно, чтобы классы имели разный тип, но по сути они одинаковы...
не могу четко сформулировать вопрос в рамках парадигмы С++, поскольку не знаю этого языка, попробую пояснить в парадигме паскаля, надеюсь, программисты поймут
Код:
type Tclass1 = class(Tclass) constructor Create(V : string); end;
описывается 2 разных класса, конструктор каждого выглядит так:
Код:
constructor TClassN.ClassX(V : string); // N 1 или 2 begin inherited Create(V, ConstN); // some code end;
то есть конструкторы отличаются только значениями передаваемой в унаследованный конструктор константы
ну, теоретически, и другие методы могут меняться, но пока речь об описании кучи таких вот "почти одинаковых" классов... можно это реализовать шаблоном в С++, чтобы не писать море одного и того же? на паскале, похоже, так нельзя... там шаблоны могут иметь в качестве параметров только типы...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
смотря что писать. я для Windows на паскале пишу - и exceptions, и какого только хрена нет. с шаблонами вот засада вышла... но тоже не без выгоды - после мозгового штурма выяснил, что изначальная мысль не нужна, прекрасно обошелся вообще без дублирования кода с разными константами лучшее решение - когда результат есть, а действий по его достижению - нет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения