Как стать автором
Обновить
47
0
Дмитрий @rus084

Программист микроконтроллеров

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

Не нашел упоминаний про защиту памяти от чтения, а это одна из важнейших функций микроконтроллера

1 для генерации сигнала лучше завести аппаратный таймер

На каком нибудь эльбрусе этот код может работать быстрее за счёт более простой конверизации компилятором и меньшего числа ветвлений (части выражения можно вычислить паралельно)
Кастовать требуется так как указатель нельзя умножать на bool
Из условия не следует что изначальные списки не отсортированы.

можно еще раз ревью?

ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        bool f;
        ListNode* t;
        return (ListNode*)
            ( 
                (!list1 * (unsigned long long)list2) + 
                (!list2 * (unsigned long long)list1) +
                ((!!list1 && !!list2 && 
                    (
                        ((f = (list1 -> val <= list2 -> val)) && (t = list1, list1->next = mergeTwoLists(list1 -> next, list2)))||
                        ((!f) && (t = list2, list2->next = mergeTwoLists(list1, list2->next)))
                    )
                ) * (unsigned long long)t)
            ); 
    }

В периферийных библиотеках для PIC16/PIC24 структуры с регистрами описаны именно битовыми полями. Там это имеет явную пользу, так как ядро умеет атомарно манипулировать битами.

Ядра cortex таких возможностей не имеют (кроме m3, там отдельные биты озу и периферии мапятся на адреса памяти), наверное поэтому производители и не заморачиваются в описании регистров периферии в виде битовых полей.

Было бы круто если регистры периферии были представлены в виде структур с методами из с++ хотя-бы для инициализации, но так почему-то никто не делает.

У этого способа еще есть недостаток: когда нужно поменять значения нескольких полей в одном регистре, компилятор сгенерирует отдельные операции чтения/модификации/записи для каждого поля, вместо одной когда оперируем целым регистром

А если тогда купить 85% + 1 акцию?

в случае если исходные операнды и результат имеют единственный тип - int16, инструкции sxth и uxth не влияют на итоговый результат и поэтому лишены смысла. Компилятор генерирует какой-то слишком не оптимальный код

А после фронта на шине установится уже другой адрес? (то значение что было защелкнуто в регистр по фронту)

буфер соединяющий шину данных и внутреннюю шину это просто буфер, или он защелкивается в момент активации?

Какой компилятор вы использовали и с какими опциями оптимизации?
Можно увидеть целиком исходники на проект где вы запускали измерения?

Не совсем понятно почему операции с int16 должны быть дольше чем с int32. и почему вычитание и сложение выполняются за разное время

Круто!

А как себя поведет команда LD PL / LD PH?

Мне кажется ее поведение будет таким: на время выставления сигнала CYCLE содержимое шины данных будет дублироваться через регистр на 8 бит шины адреса и загрузить число по изначальному адресу регистра P в него-же не получится

В этот момент наводится напряжение в обмотке связи, и ток начинает вытекать из базы Q1, втекая в базу Q2.

База биполярного транзистора проводит ток только в одну сторону. Как диод.
Схема скорее всего работает по немного другому принципу: Когда напряжение в обмотке связи положительно на стороне базы Q1, ток от R1 течет к Q1. При этом Q2 заперт, так как потенциал на его базе ниже порога открытия. Когда напряжение на обмотке связи меняет свой знак, ток от R1 течет на базу Q2, так как потенциал на базе Q1 будет меньше.
Иными словами ток от R1 течет либо на базу одного транзистора, либо на базу другого благодаря смещению их потенциалов

Этого уже достаточно чтобы набить плюсов за пост?

Усилитель сделанный из stm32f7discovery фонит в эфир на частоте около 8Мгц и этот сигнал промодулирован звуком, воспроизводимым в динамиках.
С ненаправленной антенной принимается с расстояния в несколько метров.

У меня были слишком длинные синхроимпульсы
Стабильность работы на ЭЛТ телевизоре прибавилась, но на жк сигнал всё-еще не принимается.
Может это из-за того что сигнал не так модулируется и DSP его не понимает.
Если генерировать сигнал с помощью HackRF, и на ЭЛТ, и на ЖК он принимается отлично, без дрожания


Скрытый текст

Сколько FPS получилось выжать способом программного ногодрыга?

Если взять библиотеку от gurux и скомпилить пример DLMS сервера для AVR, размер прошивки получится 166474 байт. Из них сама библиотека занимает примерно 150кб. Без учета объектов COSEM. Пропиетарные реализации занимают меньше места, к примеру библиотека для MSP430. Она использует 24кб ROM без учета COSEM.


Сейчас можно поставить какой-нибудь NXP или STM с 512кб ROM, а потом придется использовать миландр с 256кб ROM. И там уже сложно будет совместить и СПОДЕС и основной функционал

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

а нельзя написать RISC-V-like наподобие UNIX-like операционная система?

А RISC-V разве не свободна от лицензирования архитектура?

на cortex M3 число тактов равно количеству регистров + 1

Информация

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