eddy-em.livejournal.com github.com/eddyem
-
- Вот моё творчество: SciFi(1667 знак., 09.03.2025 09:36)
- Версия 3. Дышит в железе. Выяснилось, что проц спотыкается на
чтении слова без выравнивания, отсюда ".align 2". SciFi(1627 знак., 10.03.2025 10:16)
- А можно map-файл этого дела глянуть? - VladislavS.(10.03.2025 10:54)
- Вот с небольшими исправлениями. Пока в железе не запускал, на днях
буду оживлять эту таракашку. SciFi(1567 знак., 09.03.2025 16:31)
- Не в качестве придирок, а на обсудить: VladislavS.(351 знак., 10.03.2025 10:19)
- С прерываниями только начал разбираться. Увидел "__enable_irq():
mstatus |= 0x88" и сделал так не глядя. По поводу HPE я уже и не
помню, когда мне нужно было выгадать 0,5 мкс на входе в обработчик
прерывания, и немного лишнего кода на сохранение/восстановление
регистров в стеке не напрягает. Так что пока склоняюсь к
официальному GCC. Забавный факт: китайский форк GCC даже не умеет
дизассемблировать свои XW инструкции (если не врут в интернетах). - SciFi(10.03.2025 10:33)
- да, совсем наверно не видят - это стандартная команда? Zikon(1 знак., 10.03.2025 11:21, картинка)
- Не умеет "то-сё" это будет вечная проблема зоопарка RISC-V. Вот, например, он даже CSR-инструкции через раз дизассемблирует: VladislavS.(278 знак., 10.03.2025 10:53, картинка, картинка)
- С прерываниями только начал разбираться. Увидел "__enable_irq():
mstatus |= 0x88" и сделал так не глядя. По поводу HPE я уже и не
помню, когда мне нужно было выгадать 0,5 мкс на входе в обработчик
прерывания, и немного лишнего кода на сохранение/восстановление
регистров в стеке не напрягает. Так что пока склоняюсь к
официальному GCC. Забавный факт: китайский форк GCC даже не умеет
дизассемблировать свои XW инструкции (если не врут в интернетах). - SciFi(10.03.2025 10:33)
- Не в качестве придирок, а на обсудить: VladislavS.(351 знак., 10.03.2025 10:19)
- Тянуть memcpy и memset в стартап стоит только если в основной
прошивке они тоже используются. Иначе обычный цикл экономней будет. - VladislavS.(09.03.2025 14:14)
- Разве memory и подобное не инлайнятся современными компиляторами? - AlexBi(09.03.2025 20:43)
- Поведение современных компиляторов непредсказуемо. Вот такое может
быть: VladislavS.(1 знак., 09.03.2025 21:43, картинка)
- Требую пояснительную бригаду! Можно вкратце, что тут не так? - Nikolay_Po(10.03.2025 10:56)
- Всё так. Компилятор сделал рабочий код. Но сделал это неоптимальным
способом. Более новые версии такой муйнёй не страдают. - VladislavS.(10.03.2025 12:05)
- Хотя нет, страдают. Только теперь с ключом -О3. VladislavS.(186 знак., 10.03.2025 12:30)
- Не-не. Это компилятор сообщает юзверю, глядящему в дизассемблер:
"не тем занимаешься!". И он таки прав :-) - SciFi(10.03.2025 12:06)
- Пусть тогда уж придумают ключ деоптимизации. - VladislavS.(10.03.2025 12:17)
- Я хоть и не программист, но вижу вызов функции memcpy в кусочке программы, где нет (не предусмотрено программистом) использования этой функции. - reZident(10.03.2025 11:43)
- ! - Zikon(10.03.2025 11:40)
- Всё так. Компилятор сделал рабочий код. Но сделал это неоптимальным
способом. Более новые версии такой муйнёй не страдают. - VladislavS.(10.03.2025 12:05)
- Требую пояснительную бригаду! Можно вкратце, что тут не так? - Nikolay_Po(10.03.2025 10:56)
- Поведение современных компиляторов непредсказуемо. Вот такое может
быть: VladislavS.(1 знак., 09.03.2025 21:43, картинка)
- Отмечу +. Спасибо. Недавно буквально спасли эти "двое из ларца" - шедевральный же эффект! :) Ликбезте далее - красивому пределов нет. :) - bnb62(09.03.2025 15:00)
- 64 байта. Не дай бог так оголодать. - SciFi(09.03.2025 14:18)
- Из таких мелочей состоит вся наша эмбеддерская жизнь. Да и V003
совсем не жирный чип. - VladislavS.(09.03.2025 14:31)
- Из недавних, минимум пять тендеров конкуренты фейерически проиграли мне (с разрывом более 20%) закладывая дикий оверкилл по серверам. Слышу знакомы нотки. - Cкpипaч(09.03.2025 15:02)
- Не-не, меру надо знать. Это за гранью. Впрочем, настоящие мущщины
кодят в хексе, и их никто не сможет остановить :-) - SciFi(09.03.2025 14:52)
- +1 за меру. Когда-то давно заоптимизировал одно устройство и очень
долго потом страдал, потому что резервов для решения возникающих
проблем не было, а они всё возращались в ремонт и возвращались.
После этого стараюсь сдерживаться. - AlexG(09.03.2025 17:08)
- Ну это же стартап, его один раз для всех последующих проектов можно
нормально написать. Оттуда же: VladislavS.(86 знак., 09.03.2025 17:13, картинка)
- Вы очень круты в Си/Си++, но осмелюсь указать на то, что директивой
volatile вы создали неоптимизируемую переменную(и пофиг на область
видимости), которой выделена память и которой явно задано значение.
И проверяется она каждый цикл, потому что "вдруг вы из прерывания
её поменяли?". Или в чём тут тонкость? - Dingo(11.03.2025 05:42)
- Функция с volatile не мной написана, но зачем могу объянить. Когда происходит исключение и управление передаётся в эту функцию - код в ней зацикливается. Так как переменная volatile, то оптимизатор её не выкинул и значение можно отладчиком изменить и выйти из этого цикла. Зачем и куда автор так и не объяснил, но код это позволяет. Не "вдруг из прерывания", а отладчиком. - VladislavS.(11.03.2025 06:56)
- Можно остановиться в отладчике и выйти из цикла, записав в
переменную значение 0. - SciFi(09.03.2025 18:18)
- Я так и предполагал ниже по тексту. А можно сценарий такого действия узнать? - VladislavS.(09.03.2025 18:24)
- А реально это было нужно? Если попал в исключение,как из этой
кроличьей норы выбраться обратно и продолжить работу? - Andreas(09.03.2025 18:23)
- Можно по шагам дойти до места (ну, почти), откуда улетело в
HardFault. Без регистрации и СМС. - SciFi(09.03.2025 20:21)
- Ну выяснилось, что SP испоганен из-за выхода за границу массива и PC не тот восстановился, поправил код и стартуешь заново. Смысл высчитывать реальное значение, подставлять его в SP править PC и пытаться продолжить. Не понимаю, что я не понимаю. - Andreas(09.03.2025 20:45)
- Как этому помогает возможность выйти из trap? - VladislavS.(09.03.2025 20:39)
- Можно по шагам дойти до места (ну, почти), откуда улетело в
HardFault. Без регистрации и СМС. - SciFi(09.03.2025 20:21)
- Если это не РТОС, то с десятой строки говнокода посылаю
всехнахер... :) - bnb62(09.03.2025 17:25)
- А что так? Две функции делают одно и то же. Одну нах, а другую нет? - VladislavS.(09.03.2025 17:31)
- Даже я вижу, что они делают не совсем одно и то же. Скорее даже -
совсем разное. - Toчкa oпopы(09.03.2025 17:41)
- Только не рассказывайте, что было задумано под отладкой руками
поменять w=0 и выйти из прерывания HardFault. Не верю! - VladislavS.(09.03.2025 17:46)
- Ну откуда мне знать, что было задумано? - Toчкa oпopы(09.03.2025 18:11)
- Что тогда имели в виду, говоря что они делают разное? - VladislavS.(09.03.2025 18:17)
- Одна ловушка - безвыходная. Из другой, теоретически, - можно выйти. Зачем - вопрос к разработчикам. - Toчкa oпopы(09.03.2025 22:17)
- Что тогда имели в виду, говоря что они делают разное? - VladislavS.(09.03.2025 18:17)
- Это печалит. Вы наверное программист? :) - bnb62(09.03.2025 17:51)
- На питончике дочке ДЗ пару раз помогал делать. - VladislavS.(09.03.2025 17:55)
- Дык вот, в отличии от прочих придуманных Систем мы, железячники,
имеем право и на софтовый, по тому же прерыванию hard-pizdec,
сделать перезапуск, а то и на углубленную схемотехнику в виде
"спящего алабая", абсолютный reset. А в случае отказа и на этом...
передать все функции резервному комплекту, второму из трех, пока
оправданных смыслом. :) Пишите код аккуратно! - bnb62(09.03.2025 18:11)
- Как этому помогает первая функция и мешает вторая? - VladislavS.(09.03.2025 18:14)
- На самом деле Танцору не мешают (если он с большой буквы умений).
На сей день сложился комплекс аппаратных возможностей камней
требуемых эмбеддерами для исполнения поставленных задач. Уровень
планки? А требуется теперь не только аппаратные = конвейерные
рутины, но и логгирование в очень мизерных квантах. И в этом
победят достойные. Наши - определенно. Но вот... шелухи бы
отковырять, как с репчатого лука, да и порезать надо... - bnb62(09.03.2025 18:44)
- Жёстко! Я уж думал ардуинку из стола достать и мигалку на ёлку
наконец сделать. А тут вон оно чё. - VladislavS.(09.03.2025 18:48)
- Когда на бывшей работе заказчик, он же директор, он же дизайнер
изделия потребовал сделать двадцать дискретов уставки при готовой
шкале десять, мотивируя идеей мигающего состояния светодиодов
половинных значений, я сделал не только ШИМированную анимацию
включения изделия, а и компенсацию нелинейности светимости
светодиодов при линейной ШИМ коммутации. Иначе неприятно гасли при
низких значениях синуса модуляции ШИМ. Получилось вполне красиво.
Но даже менеджеры не bnb62(121 знак., 09.03.2025 19:10 - 17.03.2025 16:59)
- Хотите сказать, что свет в кинотеатре не медленным выниманием вилки
из розетки плавно гасят? - VladislavS.(09.03.2025 19:49)
- Не, там сечением провода регулируют. При помощи пасатижей :) - Cкpипaч(09.03.2025 19:56)
- А я в тендер вместо сервака с RAID-дисками засунул ПЛК c архивом на
SD-карточке. И расчетами показал что ее с запасом хватит на
обещанные пять лет архива. - Cкpипaч(09.03.2025 19:18)
- Ты даже восхитится не успеешь за обещанные 5 лет RAID. Таких
проектантов надо IMHO "в поликлинику для опытов" - (с)Кот Матроскин
:). - bnb62(09.03.2025 19:27)
- А что не так? У меня есть SD-шки и с сильно большим uptime. Кроме
того, нет никаких религиозных запретов делать бэкап прямо на ходу.
Даже инкрементальный бэкап, каждые полчаса, можно запилить. - Cкpипaч(09.03.2025 19:55)
- Хе, хе... Но даже FRAM непригодна. Знаешь же "бобину" - катушку зажигания. Магнето-ли в бензопиле? Так вот, эффект Разрыва Среды, гораздо более нагляден и исполнен в социумах ... Напряжения порождают ток в сопротивлениях, конденсаторы и индукторы копят до поры лишь. И не дай бог разрыву несогдасности... Если на другом конце длинной линии отсутствует Терминатор (120R0), то там... может исчезнуть его причина. И совсем не про эту физику речь. Другую данность нельзя bnb62(42 знак., 17.03.2025 21:03)
- А что не так? У меня есть SD-шки и с сильно большим uptime. Кроме
того, нет никаких религиозных запретов делать бэкап прямо на ходу.
Даже инкрементальный бэкап, каждые полчаса, можно запилить. - Cкpипaч(09.03.2025 19:55)
- Ты даже восхитится не успеешь за обещанные 5 лет RAID. Таких
проектантов надо IMHO "в поликлинику для опытов" - (с)Кот Матроскин
:). - bnb62(09.03.2025 19:27)
- Хотите сказать, что свет в кинотеатре не медленным выниманием вилки
из розетки плавно гасят? - VladislavS.(09.03.2025 19:49)
- Когда на бывшей работе заказчик, он же директор, он же дизайнер
изделия потребовал сделать двадцать дискретов уставки при готовой
шкале десять, мотивируя идеей мигающего состояния светодиодов
половинных значений, я сделал не только ШИМированную анимацию
включения изделия, а и компенсацию нелинейности светимости
светодиодов при линейной ШИМ коммутации. Иначе неприятно гасли при
низких значениях синуса модуляции ШИМ. Получилось вполне красиво.
Но даже менеджеры не bnb62(121 знак., 09.03.2025 19:10 - 17.03.2025 16:59)
- Жёстко! Я уж думал ардуинку из стола достать и мигалку на ёлку
наконец сделать. А тут вон оно чё. - VladislavS.(09.03.2025 18:48)
- На самом деле Танцору не мешают (если он с большой буквы умений).
На сей день сложился комплекс аппаратных возможностей камней
требуемых эмбеддерами для исполнения поставленных задач. Уровень
планки? А требуется теперь не только аппаратные = конвейерные
рутины, но и логгирование в очень мизерных квантах. И в этом
победят достойные. Наши - определенно. Но вот... шелухи бы
отковырять, как с репчатого лука, да и порезать надо... - bnb62(09.03.2025 18:44)
- Как этому помогает первая функция и мешает вторая? - VladislavS.(09.03.2025 18:14)
- Дык вот, в отличии от прочих придуманных Систем мы, железячники,
имеем право и на софтовый, по тому же прерыванию hard-pizdec,
сделать перезапуск, а то и на углубленную схемотехнику в виде
"спящего алабая", абсолютный reset. А в случае отказа и на этом...
передать все функции резервному комплекту, второму из трех, пока
оправданных смыслом. :) Пишите код аккуратно! - bnb62(09.03.2025 18:11)
- На питончике дочке ДЗ пару раз помогал делать. - VladislavS.(09.03.2025 17:55)
- Ну откуда мне знать, что было задумано? - Toчкa oпopы(09.03.2025 18:11)
- Только не рассказывайте, что было задумано под отладкой руками
поменять w=0 и выйти из прерывания HardFault. Не верю! - VladislavS.(09.03.2025 17:46)
- Даже я вижу, что они делают не совсем одно и то же. Скорее даже -
совсем разное. - Toчкa oпopы(09.03.2025 17:41)
- А что так? Две функции делают одно и то же. Одну нах, а другую нет? - VladislavS.(09.03.2025 17:31)
- Вы очень круты в Си/Си++, но осмелюсь указать на то, что директивой
volatile вы создали неоптимизируемую переменную(и пофиг на область
видимости), которой выделена память и которой явно задано значение.
И проверяется она каждый цикл, потому что "вдруг вы из прерывания
её поменяли?". Или в чём тут тонкость? - Dingo(11.03.2025 05:42)
- Ну это же стартап, его один раз для всех последующих проектов можно
нормально написать. Оттуда же: VladislavS.(86 знак., 09.03.2025 17:13, картинка)
- +1 за меру. Когда-то давно заоптимизировал одно устройство и очень
долго потом страдал, потому что резервов для решения возникающих
проблем не было, а они всё возращались в ремонт и возвращались.
После этого стараюсь сдерживаться. - AlexG(09.03.2025 17:08)
- Из таких мелочей состоит вся наша эмбеддерская жизнь. Да и V003
совсем не жирный чип. - VladislavS.(09.03.2025 14:31)
- Разве memory и подобное не инлайнятся современными компиляторами? - AlexBi(09.03.2025 20:43)
- А где вызовы конструкторов глобальных экземпляров классов? Я вот
пользуюсь библиотечным _start, там все есть. Кроме инициализации
.text - но это как раз несложно самомму написать. - il-2(09.03.2025 09:42)
- мне плюсы без надобности, звыняйте - SciFi(09.03.2025 09:46)
- Версия 3. Дышит в железе. Выяснилось, что проц спотыкается на
чтении слова без выравнивания, отсюда ".align 2". SciFi(1627 знак., 10.03.2025 10:16)
- мой crt на С++ для 003 в одном заголовке klen(11 знак., 03.03.2025 13:40, ссылка)
- Зачем constexpr у функций возвращающих void, простите? VladislavS.(91 знак., 03.03.2025 17:57)
- ну есть некоторые не доработки конечно. на самом деле я тестирую
свежие стандарты С++, оптимизации, некоторые вещи через такую
хитровыкрученную жоппу закручены... методом научного тыка. иногда
остаются перлы после таких скачек. но главное благодаря этому crt
минимальная рабочая программка с main в котором цикл - всего 144
байта, если добавить код инициализации .data .bss и вызов
глобальных конструкторов то 192байта. это полноценная С++
программа. klen(1 знак., 11.03.2025 14:26, ссылка)
- Таки вы слегка лукавите. 156 байт у вас только таблица векторов
прерываний. Если 192 байта это сверху к ней, то это овердифига. - VladislavS.(12.03.2025 07:48)
- Вот с инициализацией .data .bss и конструкторами. С затычкой в main. VladislavS.(26 знак., 12.03.2025 10:09, картинка, картинка)
- Я уже писал про глобальный вкл/выкл прерываний. Это только бит MIE.
Соответственно, вкл это "csrsi mstatus,8", а выкл "csrci
mstatus,8". Зачем вы все MPIE дрюкаете? Его процессор при входе в
исключение ставит. - VladislavS.(11.03.2025 21:08)
- Если честно - я тоже его дрюкаю :-) Просто потому, что так делается в китайских примерах. il-2(463 знак., 12.03.2025 06:13)
- Таки вы слегка лукавите. 156 байт у вас только таблица векторов
прерываний. Если 192 байта это сверху к ней, то это овердифига. - VladislavS.(12.03.2025 07:48)
- ну есть некоторые не доработки конечно. на самом деле я тестирую
свежие стандарты С++, оптимизации, некоторые вещи через такую
хитровыкрученную жоппу закручены... методом научного тыка. иногда
остаются перлы после таких скачек. но главное благодаря этому crt
минимальная рабочая программка с main в котором цикл - всего 144
байта, если добавить код инициализации .data .bss и вызов
глобальных конструкторов то 192байта. это полноценная С++
программа. klen(1 знак., 11.03.2025 14:26, ссылка)
- Вот, вроде тоже С++ - как и у Владислава, но у него мне, сишнику, хоть немного понятней. Eddy_Em(321 знак., 03.03.2025 17:33)
- Позор!!! Тык мышой, и что же я в вижу в firefox? // карта
адресов регистров переферии - VVB(03.03.2025 15:26)
- даа... позор. я и не знал про такие финтифлюшечки :) тепреь буду
знать! сколь кож всякой разной фигни обитает в окружающей
действительности.. а ты и не знаешь! как режактору эклипсы сказать
такое делать - пока не нашел. есть утилитка "dos2unix --add-bom" - klen(11.03.2025 14:22)
- Может, просто в исходники не добавлять ничего, кроме ASCII? Eddy_Em(128 знак., 11.03.2025 21:15)
- ASCII? Позанудствую... VVB(1093 знак., 12.03.2025 11:04)
- ASCII достаточно для Си и Си++. И Питона. И других языков почти
наверняка. Наверное с этой точки зрения. - Nikolay_Po(12.03.2025 11:29)
- В C++ можно и такой код писать: VVB(239 знак., 12.03.2025 12:05)
- ASCII достаточно для Си и Си++. И Питона. И других языков почти
наверняка. Наверное с этой точки зрения. - Nikolay_Po(12.03.2025 11:29)
- ASCII? Позанудствую... VVB(1093 знак., 12.03.2025 11:04)
- Может, просто в исходники не добавлять ничего, кроме ASCII? Eddy_Em(128 знак., 11.03.2025 21:15)
- К klen то какие вопросы? У него файл честный UTF-8, как в приличном
обществе и принято. - VladislavS.(03.03.2025 17:25)
- В приличном обществе принят BOM (Byte Order Mark). 0xEF 0xBB 0xBF в
начале файла. VVB(2 знак., 04.03.2025 07:27, ссылка, ссылка)
- Спасибо. - Nikolay_Po(04.03.2025 11:45)
- В приличном обществе принят BOM (Byte Order Mark). 0xEF 0xBB 0xBF в
начале файла. VVB(2 знак., 04.03.2025 07:27, ссылка, ссылка)
- даа... позор. я и не знал про такие финтифлюшечки :) тепреь буду
знать! сколь кож всякой разной фигни обитает в окружающей
действительности.. а ты и не знаешь! как режактору эклипсы сказать
такое делать - пока не нашел. есть утилитка "dos2unix --add-bom" - klen(11.03.2025 14:22)
- Зачем constexpr у функций возвращающих void, простите? VladislavS.(91 знак., 03.03.2025 17:57)
- Конечно, а в чём проблема? VladislavS.(1 знак., 01.03.2025 09:51, ссылка)
- У меня почти то же самое (и тоже не получилось без асма обойтись),
но что-то пошло не так… Eddy_Em(1 знак., 01.03.2025 16:07, ссылка)
- Проверь чтобы таблица векторов на 2К была выровнена. - VladislavS.(02.03.2025 10:48)
- Ага, в ld косяк... - Eddy_Em(02.03.2025 16:08)
- Вот так можно "обмануть" VladislavS.(1 знак., 03.03.2025 08:30, картинка)
- И правда, спасибо. Простой и надежный способ. - Eddy_Em(03.03.2025 10:59)
- used, naked, weak... А это прилично? - SciFi(03.03.2025 10:47)
- Логичнее такой порядок: weak, naked, used. Тогда совсем неприлично выходит. - Nikolay_Po(03.03.2025 10:53)
- Владислав, всегда помнил, что ты эксперт. Но тут ты превзошёл
самого себя. Хочу сказать Спасибо, но понимаю, что нихрена я не
понимаю. Nikolay_Po(171 знак., 03.03.2025 10:17)
- Да брось. То же самое сделано в родных асмовских стартапах. Только
на асм это всё проще делается. VladislavS.(81 знак., 03.03.2025 10:42)
- Так извернуться могут не только лишь все! - Nikolay_Po(03.03.2025 10:45)
- Да брось. То же самое сделано в родных асмовских стартапах. Только
на асм это всё проще делается. VladislavS.(81 знак., 03.03.2025 10:42)
- В качестве лайвхака для v003 - таблицу векторов разместить с нуля и в нулевом векторе оставить j reset_handler. Так оптимальней всего память занимается. - VladislavS.(02.03.2025 17:46)
- Вот так можно "обмануть" VladislavS.(1 знак., 03.03.2025 08:30, картинка)
- Ага, в ld косяк... - Eddy_Em(02.03.2025 16:08)
- Совсем без асм в принципе не может получиться - SP и GP, в отличии от кортексов, надо руками инициализировать. VladislavS.(471 знак., 01.03.2025 20:44)
- Проверь чтобы таблица векторов на 2К была выровнена. - VladislavS.(02.03.2025 10:48)
- У меня почти то же самое (и тоже не получилось без асма обойтись),
но что-то пошло не так… Eddy_Em(1 знак., 01.03.2025 16:07, ссылка)
- В среде разработки MRS-II - небольшой ассемблерный стартап, ещё не разбирался. Zikon(99 знак., 01.03.2025 09:05, ссылка)
- Вот моё творчество: SciFi(1667 знак., 09.03.2025 09:36)