Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 09:15:57

на нормальный C++(14).
На календарь то посмотрите. Нормальный сейчас С++20. Накрайняк С++17, если компилятор не поддерживает выше.

пирожок только что из печки - прошу откушать
Какие преимущества мы получим? Код уменьшится раза в два как в примере с MIN? :)

Настрогать классов вместо функций это ещё не С++. Вот с чем надо бороться в первую очередь.

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 11:28:58

для AVR есть готовые макросы для атомных операций - util/atomic.h (не ++)

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 19:15:20

ARV, По вашим советам скачал последнюю микрочип студию и обнаружил что в ней не работает мой отладчик/программатор. Главное в авр студио 7 работает а в новой нет.
Подскажите как можно обновить компилятор в 7 студии чтоб работал __flash. Может инструкция какая есть?
Еще читал что в IAR есть с коробки, но переходить на новую программу пока не охота

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 20:18:45

так?
А обязательно "выравнивать" длины union-ов? У меня int - 4 байта (это я в примере лоханулся сгоряча). Хотя, компилятор молча проглотил. Когда я пытался, не додумался поле whereami "вынести" из юниона "за скобки". Хорошо, теперь будем переделывать журнал, чтобы всё теперь записывалось в одну память, а не писалось в два разных места.

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 20:25:58

uldemir писал(а):А обязательно "выравнивать" длины union-ов?
ну так если не хотите, чтобы у вас в одном режиме тупо несколько байтов всегда пустовало, надо выравнивать. потому как память выделяется под наибольший размер элемента юниона.

если у вас int32_t, так и писали бы, ведь int16_t у вас есть... имхо, int в Си - такой же подлый тип, как и char

Re: Вопросы по С/С++ (СИ)

Чт янв 20, 2022 20:46:30

Ой, я ленивый. как пересел на 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к и этого хватает только на пол-минуты при таком объёме данных.

Re: Вопросы по С/С++ (СИ)

Пт янв 21, 2022 22:00:33

uldemir, а сжимать не пробовали на лету? Я просто не знаю ни особенностей изменения этих координат (дельта-кодирование?), ни их распределения (Хаффман?), не требуемой точности при хранении (интерполяция?) ни множества потоков (МДКП?). Но, обычно, такие данные неплохо сжимаются.

Re: Вопросы по С/С++ (СИ)

Пт янв 21, 2022 22:35:55

Вот если бы мне нечем было бы заняться, то может этим и заморочился бы. Или был бы в МК такой аппаратный модуль. Но модуля нет. И журналирование не самоцель, а инструмент для исследования проблем, возникающих при создании устройства. И потому хочется, чтобы было всё прозрачно. С другой стороны пыжиться, чтобы уместить в два раза больше? У меня полигончик маленький и время прохода (медленное) 25-28 секунд, а быстрый проход 4-5 секунд. Пока этой памяти хватает. И тратить процессорное время на компрессию? Его (времени), возможно, и так не хватает. Хотя, пока что, исследуя данные, не зафиксировал потери времени - все записи идут строго с 2.5мс интервалом без выпадений. С другой стороны выбранный набор данных может поменяться: если я посчитаю, что соответствующий модуль отлажен - какие-то данные могу перестать журналировать, а если начнутся непонятные глюки - придётся добавить "подозреваемых".

И характер данных, из-за проблем, непредсказуем. Вот журналирование выявило, внезапно, что у меня скорость одного мотора почему-то меняет знак на 2-4 отсчета. И пока не могу выяснить, аппаратная проблема, или программная, или журналирования (ведь я скорость вычисляю как 32 битное число, а в журнале пишу обрезанное до 16 бит).

Уфф, что только не придумаешь, лишь бы не делать!

Re: Вопросы по С/С++ (СИ)

Сб янв 22, 2022 13:03:31

uldemir, Ваше дело, но заморачиваться тут особо нечего, так как все применимые тут алгоритмы сжатия написаны уже до нас и найти их исходники на C или C++ проблем не представляет. А степень сжатия в таких случаях, обычно, не в два раза, а на порядок. Судя по Вашим словам, дельта-кодирование в купе с Хаффманом тут сразу десятикратное сжатие дадут. Ну не может физический объект резко менять свой импульс.

Re: Вопросы по С/С++ (СИ)

Вс янв 23, 2022 14:46:04

Говорил в миру один - "макросы зло!"
Есть ещё одно зло - велосипедостроение! Сразу не бросилось в глаза, но ведь есть std::min. Дяди старались, в стандарт вносили - пользуйтесь.

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 08:17:35

а вот просветите меня на счет шаблонов в С++: можно ли в шаблоне задавать не тип, а константу? ну то есть есть набор классов, отличающихся только тем, что инициализируются они разными значениями констант. нужно, чтобы классы имели разный тип, но по сути они одинаковы...

не могу четко сформулировать вопрос в рамках парадигмы С++, поскольку не знаю этого языка, попробую пояснить в парадигме паскаля, надеюсь, программисты поймут
Код:
type
  Tclass1 = class(Tclass)
    constructor Create(V : string);
  end;

  Tclass2 = class(Tclass)
    constructor Create(V : string);
  end;
описывается 2 разных класса, конструктор каждого выглядит так:
Код:
constructor TClassN.ClassX(V : string); // N 1 или 2
begin
  inherited Create(V, ConstN);
  // some code
end;
то есть конструкторы отличаются только значениями передаваемой в унаследованный конструктор константы

ну, теоретически, и другие методы могут меняться, но пока речь об описании кучи таких вот "почти одинаковых" классов... можно это реализовать шаблоном в С++, чтобы не писать море одного и того же? на паскале, похоже, так нельзя... там шаблоны могут иметь в качестве параметров только типы...

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 10:29:38

ARV, конечно можно! Шаблон в С++ может быть инстанциирован как типом, так и константой. Сейчас пример нарисую.

Compiler Exploer
Код:
#include <iostream>

template <uint32_t X, typename T>
auto foo(T val)
{
  return T(val*X);
}

auto main() -> int
{
  std::cout << foo<10>(20)  << std::endl;
  std::cout << foo<20>(11.22f) << std::endl;
}
Тут простой пример для функции. Для класса всё то же самое, просто написано будет больше.

Вот ещё неплохой пример с константой.
Код:
template<unsigned N, auto f, auto... args>
inline void Repeat()
{
  if constexpr (N > 0)
  {
    f(args...);
    Repeat<N-1, f, args...>();
  }
}
Функция f с произвольным количеством аргументов args выполняется N раз.
Код:
Repeat<5, []{ PA1::set(); PA1::clear(); }> ();
  movs r3, #160   ; 0xa0
  movs r2, #2
  lsls r3, r3, #23
  str r2, [r3, #24]      ; PA1=1
  strh r2, [r3, #26]     ; PA1=0
  str r2, [r3, #24]      ; PA1=1
  strh r2, [r3, #26]     ; PA1=0
  str r2, [r3, #24]      ; PA1=1
  strh r2, [r3, #26]     ; PA1=0
  str r2, [r3, #24]      ; PA1=1
  strh r2, [r3, #26]     ; PA1=0
  str r2, [r3, #24]      ; PA1=1
  strh r2, [r3, #26]     ; PA1=0

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 12:49:23

хорошо вам, плюсистам...

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 13:00:40

И не говори! :)

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 14:25:08

хорошо вам, плюсистам...

Нужно проще смотреть на жизнь. И даже без плюсов.
А то понтов много, а толку...

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 14:54:18

хорошо вам, плюсистам...

Где-то хорошо, а где-то плохо. Лично для меня писать на C++ без exceptions - удовольствие ниже среднего.

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 15:48:27

OKF, Виноград то кислый, правда? :)

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 15:52:39

Лично для меня писать на C++ без exceptions - удовольствие ниже среднего.

Кто не дает писать с exceptions, раз уж так сильно хочется? Или на чем тогда писать, на С без exceptions и еще кучи всего?

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 16:36:31

смотря что писать. я для Windows на паскале пишу - и exceptions, и какого только хрена нет. с шаблонами вот засада вышла... но тоже не без выгоды - после мозгового штурма выяснил, что изначальная мысль не нужна, прекрасно обошелся вообще без дублирования кода с разными константами :))) лучшее решение - когда результат есть, а действий по его достижению - нет.

Re: Вопросы по С/С++ (СИ)

Вт янв 25, 2022 19:36:45

Кто не дает писать с exceptions, раз уж так сильно хочется?

А какие компиляторы C++ для того же AVR поддерживают исключения? Впрочем и на STM32 с исключениями все не сладко.

Или на чем тогда писать, на С без exceptions и еще кучи всего?

Если вызов метода не может возвращать объект, так как должен возвращать код ошибки, то преимущества C++ теряются, а недостатки - остаются.
Ответить