Тут много раз высказывались про то, что ядро x51, на котором базируются STC, устаревшее. А в чем конкретно это будет проявляться при написании и исполнении кода? По сравнению с другими 8-разрядными МК и при равной тактовой частоте.
А вот по поводу "...взял STM32 помощнее и всё ОК! Клиент заплатит..." мне кажется как раз наоборот. В настоящее время новые производительные камни обычно и стоят дешевле. Пока разработчик "старой школы" будет по привычке разбираться в регистрах, "молодой" уже выполнит заказ и будет попивать пивко. Да, он будет использовать библиотеки типа SPL или даже HAL (вот негодяй) и у него останеться на 20% меньше свободной памяти. Зато продажи уже идут и заказчик тоже попивает мартини.
Частично соглашусь со второй частью Вашего сообщения. Иногда так и есть Но на то надо иметь некий опыт проектирования, особенно на первой стадии - планировании. Я не поленился и продумал алгоритм. Мой код работает на МК 8051 (в партии из 100 шт он стоит 3 юаня, грубо 45р), его - на каком-то STM32 за 850р. В год они продают 150-200 изделий.
Про "моральное устаревание" 8051 Был удивлён, но в применяемых мною компиляторах получилось весьма парадоксально: один и тот же код на ЯВУ, но скомпилированный под AVR и 8051, дал меньший по размеру bin именно под 8051. А когда я переписал SPI с программного на аппаратный, то и еще меньше. Да, и про скорость: Тут вообще весело )) Был код для AVR, тактовая - 16 МГц. Дисплей монохромный st7920 на SPI. Когда запустил на STC 8051 - дисплей не работал. Пришлось его тактовую снизить до 6 МГц.
а вообще, это уже халивары: кто stm8 хвалит, кто молится на STM32, а ретрограды типа меня фыркают и мимишкаются с avr и 8051
_________________ Верните прошлое! там было такое прекрасное будущее...
А в чем конкретно это будет проявляться при написании и исполнении кода? По сравнению с другими 8-разрядными МК и при равной тактовой частоте.
В меньшей скорости исполнения и бОльшем объёме кода. В среднем. В каких-то отдельных случаях, зная особенности ядра (систему команд, регистры и т.п.), конечно можно так написать код, что на данном конкретном ядре под конкретным компилятором этот код будет быстрее/меньше, чем на другом.
Пока разработчик "старой школы" будет по привычке разбираться в регистрах, "молодой" уже выполнит заказ и будет попивать пивко. Да, он будет использовать библиотеки типа SPL или даже HAL (вот негодяй) и у него останеться на 20% меньше свободной памяти. Зато продажи уже идут и заказчик тоже попивает мартини.
....а когда завтра обнаружится баг (внутри использованной "либы"), то попивавший пивко ничего с ним сделать не сможет. Ибо надо разбираться и в тоннах кода чужой "либы" и ещё + разбираться в регистрах. Чего он не умеет. И просто молча сольётся, кинув заказчика. А написавший код сам (разбираясь в регистрах) найдёт и исправит баг. Ведь код он писал сам, а в своём коде разбираться многократно проще, чем в чужом. Да и разбираться нужно просто меньше (регистры он уже знает, и свой код - много меньше чем чужие "либы", так как написан под данную задачу, без всякого лишнего мусора).
И так как правило и случается всегда. А баги - они всегда были и будут. Как правило такие кодонаписатели потом заявляют: "Баг не у меня, а в либе. И нужно подождать пока авторы либы его исправят". И заказчику приходится ждать неопределённое время или смириться с тем что есть.
Чтобы компоновщик мог вырезать неиспользуемые функции/данные, надо чтобы компилятор создавал для каждой такой функции или блока данных отдельную секцию. Только в этом случае компоновщик сможет удалить её (так как манипулирует входными секциями целиком и не может вырезать из них куски). Вот такой ключ (помещать каждую функцию в отдельную свою секцию .obj-файла) и нужно найти и включить в компиляторе. Иначе - для каждого файла исходного кода генерится одна секция. В которой находятся код всех функций этого файла в виде единой секции. И если хотя-бы одна из функций этой секции где-то используется, то вся секция будет включена в выходной образ прошивки. Даже если там 99 функций - не используется, а используется только одна.
Вот кстати. Когда игрался с stm8 на sdcc (а sdcc под 8051 заточен изначально, кто не знает), то там такая же беда была, что компилятор тянул все функции stdperiph в исполняемый файл. И эту проблему там решили разложив эти библиотечные функции на сотни отдельных файлов: одна функция - один файл. Даже скрипт какой-то был (не вручную же это делать). Вот такая вот порнография. Не думаю, что проблем с Кейл так же решается и igor48 рад такое услышать ))
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Да, и про скорость: Тут вообще весело )) Был код для AVR, тактовая - 16 МГц. Дисплей монохромный st7920 на SPI. Когда запустил на STC 8051 - дисплей не работал. Пришлось его тактовую снизить до 6 МГц.
Вы подключили тормозной SPI дисплей по документации работающий на частоте 2.5 MHz к 16 MHz AVR, как думаете какой там делитель был для SPI? 8, в крайнем случае 4. А на STC видимо делитель был 2, потому до 6 MHz частоту и пришлось понижать )
Замечание дельное, но тут иная ситуация: SPI везде был софтовый, каких-либо настроек скорости он не содержал. После того, как я переписал под STC на аппаратную реализицию, мне пришлось включить делитель 64, но и этого оказалось мало. Как ранее писал: Пришлось уменьшить тактовую STC до 6 МГц, тогда работа пошла.
_________________ Верните прошлое! там было такое прекрасное будущее...
Если мне не изменяет память, то 7920 у меня работал максимум на 1.75 МГц. На 2 МГц заводился, но глючил. Плюс там еще засада - каждая команда обрабатывается дисплеем 72 мкс. Очень дурной и неудобный дисплей. Там тактовая может быть низкая, но не выдержать паузу между командами - глюки... Паузу выдержать, но поднять тактовую - те же грабли....
Насчет выбрасывания неиспользуемого кода - то на СТМках в свойствах проекта в настройках тулчейна я ставлю 3 галки: 2 в настройках компилера (раздел оптимизации) - Prepare dead code removal и Prepare dead data removal 1 в настройках линкера (так же, в блоке оптимизации) - Dead code removal. И только вот тогда у меня все неиспользуемые функции улетают из кода вон. Возможно, в кейле тоже есть отдельные настройки у компилятора и у линкера для STC
А это из-за излучения. Близость дизайнера к телу руководства гораздо сильнее на него воздействует, чем увещевания инженера...
ps а еще бывает: Ой, у нас был проект торгового автомата молокомата (продажа разливного молока)... А можно платы приспособить для нашего будущего станочка ЧПУ?
_________________ Верните прошлое! там было такое прекрасное будущее...
Хотели, конечно Но Закон запрещает: А вдруг вы "до 18" продадите?
СпойлерСпециально глянул архивы: В 2016 делал автоматику для пивоварни. Затиратор, Терморегулятор и Наливатор Чаны плавают в баках с глицерином (чтобы не кипело как вода при 100С). Мощность нагревателя каждого - 120 Квт вроде было
_________________ Верните прошлое! там было такое прекрасное будущее...
И заказчику приходится ждать неопределённое время или смириться с тем что есть.
Не встречал я таких заказчиков. Мой, например, в таких случаях говрил: "Щас я приеду и табуретку тебе на голову надену !". Когда затронуто святое - бабло - про гуманизьм и прочие изьмы можно забыть. Касаемо чужих либ. Вера в их непогрешимость бывает чревата. Либо её тестируешь до изнеможения (либу, а не веру ) - и то не факт, что не выкинет что-то в редком и недотестрованном наборе данных - либо пишешь своё. Но в своём тоже могут быть ошибки? Конечно. Но, как правильно было замечено, исправление своего кода быстрее на порядок с вытекающими из-под отсюда последствиями.
_________________
Последний раз редактировалось Jack_A Вс дек 29, 2024 11:41:02, всего редактировалось 3 раз(а).
Касаемо чужих либ. Вера в их непогрешимость бывает чревата.
СпойлерЛет этак больше 10 назад был на "обучении". Большой дядька в безопасности со сцены вещал разные тех. казусы, после которых то взорвалось что-то, то сгорело, то растворилось в "химии" ))) Особо запомнился случай, когда совпадение двух "не может быть" привело к огромным проблемам на производстве. Как помню: На оборудовании висит некий блок автоматики с ЖКИ. Персонал тележкой бьёт блок, внешнее проявление повреждения - трещина на экране ЖКИ. Трещина, но вроде всё видно, и особо считыванию данных не влияет. Приходит КИПовец, смотрит: Закажу. Уходит. Через ХХ дней происходит какая-то аварийная ситуация и... автоматика зависает. В конце концов "бабах" и чего-то там еще нехорошее. ... Почти 1.5 года шло расследование.
В заключении много интересного. Особенно про веру в библиотеку (а там было что-то серьезное, типа IAR или подобное). При подаче питания - инициализация ОЗУ, периферии и нашего ЖКИ. В оной ожидание изменения некого флага. Обычно за сколько-то там десятков mS активировалось. НО такая же инициализация при выводе аварийного сообщения. Идея такова: если даже какой был сбой в памяти контроллера, то ЖКИ точно оживёт. Дальше: все события пишутся в лог. При срабатывании тревоги - еще и коды ошибок.
И вся цепочка получается знатной: При подаче питания активация WD и всей периферии, ОЗУ чистим. В логи пишем код ошибки = 0 (нет ошибки). Авария > инициализация ЖКИ, зависаем в ожидании флага, перезапуск по WD, чистое ОЗУ, в логах код ошибки 0 (нет ошибки). Перезапуск... и так до бесконечности.
_________________ Верните прошлое! там было такое прекрасное будущее...
Подскажите ссылку на мануал STC8H8K64U, где есть распиновка в корпусе DIP28. Есть мнения по аналогиям, но нет полной уверенности. Где-то слева внизу должна быть опора (Vref)? Хочу заменить ими 15W408 есть сомнения.
Наконец мне стала понятна эта беспощадная логика компиляции. Из описания C51 для Keil: «Невызванная процедура рассматривается компоновщиком как потенциальная процедура прерывания. Это означает, что функции назначается ненакладываемое пространство данных для ее локальных переменных.»
Т.е. она не только занимает место в памяти программ, но и память данных отъедает больше обычного. В общем – полное зло.
Привет всем Котам. Увидал тему про STC, решил под черпнуть инфо о STC15W408AS, и жестко обломался узнав что прошивку с них не считать. А ещё думал глядя на картинку проги "А где же кнопка Чтение?". Досадно. Есть сварочный аппарат Elitech_is200mСпойлерБрал его для экспериментов с силовой техникой т.к. у подобного аппарата управа была на STM, а у этого на STC15W408AS. Видимо последствия удешевления. Правильно понимаю до сих пор нет вариантов чтения прошивки с этих МК?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения