Обновить
23
0

Схемотехник/программист МК

Отправить сообщение

При наличии эксклюзивных акций на какие либо группы товаров, привязанных к конкретной учетке вся затея поиска более выгодной цены идет лесом. Как можно решить этот вопрос? ?

Даже и без этого использование мобильного приложения вместо веб ресурса, ака умершего екаталога, выглядит странной

JLink OB стандартная штука которую многие применяют, это как и stlink на платах discovery.

О чем статья?

А при чем здесь j-link?

Да, прямое несоответствие, должно к самому широкому приводиться.

Тесты это конечно хорошо, но не видно поддержки открытия и выбора с клавиатуры?

Я бы еще попросил ссылочку на демо.

В таре куча разных приколов. Столкнулся с проектом в версии 8. Вот синтетический код с сутью проблемы:

double a = 0.2;
uint32_t b = 6;

double r1 = a * b; //=1.2
double r2 = b * a; //=0

Потому что он оценивал тип по первому множителю.

Внутри чипа просто 16-битный сдвиговый регистр. У микросхемы нет обратной связи. Тут SPI только посылает данные одно 2х байтовое слово.

Это не обратная связь, это линия для чтения данных микросхемы. Либо предложения в абзаце перемешаны.

Почти все акронимы из таблицы нигде не встречаются в тексте.

Если обозревать, то хорошо бы ещё рассказать, про шумы, гармоники

Кстати, сложность доступа к нужному элементу будет не O(Log2(n)), так как в дереве могут находиться лишние узлы и оно несбалансировано. В итоге в лучшем случае это O(Log2(n)) в худшем - О(n) или ещё хуже, скорее это будет где-то между ними.

Весьма странный интерфейс. По идее модулям которые используют этот драйвер не нужно знать о его внутренней структуре с его узлами и всем остальным, нужен просто адрес и данные, само собой с длиной, раз уж на си пишем.

Хорошо бы определиться с терминологией, что такое страница, сектор, блок:

  • Обычно в этих микрухах страница это 256 байт, как раз адресуемость по младшему байту адресного слова.

  • Сектор это уже минимальная область которая стирается, обычно 4 килобайта

Следовательно вопрос, что в вашем алгоритме называется страницей?

А в чем сложность использования SPI nor и fatfs?

Типо того, нужно спеку читать. У нас много устройств которые логи пишут, даже не очень много логов, в итоге сдшки выходили из строя за единицы месяцев. Приходилось искать более надёжные и с алгоритмами балансировки износа. В итоге совсем от них отказались.

Поддерживаю. Но ещё бы добавил:

SD карта сама на аппаратном уровне делает равномерный износ

Далеко не каждая SDшка имеет алгоритмы для выравнивания износа. А те которые имеют стоят гораздо дороже обычного ширпотреба.

Описания, как и сами неприятности два и три неверны. Вот кусок текста из даташита.

The last address byte (the 8 least significant address bits, A7-A0) should be set to 0 for 256 bytes page program. If A7-A0 are not all zero, transmitted data that exceed page length are programmed from the starting address (24-bit address that last 8 bit are all 0) of currently selected page. If the data bytes sent to the device exceeds 256, the last 256 data byte is programmed at the request page and previous data will be disregarded.

Младший байт адреса должен быть нулями только для записи страницы целиком. Если не нули, то количество байт не должно быть больше чем размер страницы + офсет.

Поясню на пальцах: внутри есть буфер на 256 байт, 8 битный счетчик принятых байтов. Когда передается адрес его младший байт устанавливает офсет внутри этого буфера. Соответственно если гнать поток байтов длиннее оставшегося места, то счетчик переполняется и считает с нуля, а данные пишутся в начало буфера.

Аналогично если попытаться записать сначала страницы больше 256 байт - данные перетрутся.

Можно городить ООП: по сути все эти статичные переменные запихнуть в структуру.

Несколько SPI флэшек еще не было нужно.

Если две, то продублировать не проблема: чипселект и буфер в зависимости от адреса выбрать и чуть-чуть усложнить логику. Три - чуть сложнее, но тоже почти так же

Очень круто, но есть подозрение, что ножки(крепления) где тензодатчик будет не просто отлить.

Если вам не нужно числовое представление, то лучше сразу в строку загонять, будет еще лаконичнее

LOG_INFO(SYS,"GitSha: " GIT_SHA);

к тому же, без лишних вычислений.

Нечего в исходниках делать переменной информации.

А гит или что-то аналогичное использовать полезно ?

Можно сделать проще:

Используем make

GIT_SHA := $(shell git rev-parse --short HEAD)

# ...
DEFINES += GIT_SHA=0x0$(GIT_SHA) # можно сделатьстроку если надо
C_DEFS = $(addprefix -D,$(DEFINES))
# ...

Используем в коде

printf("FW version : %d.%d.%d (%08x)\n", FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR, FIRMWARE_PATCH, GIT_SHA)

Для идентификации имя ветки избыточно, достаточно хэша комита

Код, в частности на си, это не команды для железа, а всего лишь человекочитаемое представление оных.

Эффективность решения задачи зависит не только от того какие вы флаги оптимизации включите, а то, как реализуете алгоритм.

Но Вы можете этого не делать, а полагать, что все зависит лишь от того, что Вы убрали макросы и комментарии из приведенных Вами аналогов.

Всё это называется: "не читал, но осуждаю". Дело не в макросах и комментариях.

Не вижу смысла больше общаться с вами, никаких аргументов вы не приводите.

Так это доступно уровнем выше))

Пару ключиков для линкера, реализуем функции _write, _read, _lseek и остальные, и дело в шляпе - пользуемся fprintf и всеми остальными благами)

Или можно не сильно заморачиваясь использовать функции fatfs: f_open, f_write, f_read.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность