Микроконтроллеры STC: первые впечатления.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 230
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Микроконтроллеры STC: первые впечатления.

Сообщение ks0 »

STC-ISP это программа для прошивки? Убунту у меня, я без нее. И насколько знаю все заголовочные файлы и примеры от производителя идут для Кейла.
Вот такой проект нашел https://codeberg.org/20-100/uni-STC
Буду смотреть. Хотя хотелось бы в одном файле, без вот этого развесистого дерева.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

Re: Микроконтроллеры STC: первые впечатления.

Сообщение Shuspano »

Инклюды STC8G и STC8H из STC-ISP (V6.94K). Для кейла, иара, sdcc и ассемблера.
STC-ISP рекрасно под вайном работает. Сделать winetricks mfc42, а если создать симлинк на /dev/ttyUSB0 под именем com-порта с любым свободным номером в ~/.wine/dosdevices/ - то даже шьет.
Вложения
STC8G-H_headers.tar.gz
(64.43 КБ) 223 скачивания
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 230
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Микроконтроллеры STC: первые впечатления.

Сообщение ks0 »

Не могу понять назначение регистра ADCTIM (АЦП). Конкретно на STC8G.
Делитель задается в регистре ADCCFG. Но зачем нужен ADCTIM?
Написано: ADC timing control register (ADCTIM)
бит: CSSETUP: ADC channel selection time control Tsetup
биты: CSHOLD[1:0]: ADC Channel selection hold time control Thold
биты: SMPDUTY[4:0]: ADC analog signal sampling time control Tduty (Note: SMPDUTY must not be less than 01010B)

Потом приводит диаграмма, в которой видно, что время работы АЦП складывается двух этапов. Что выполняется на первом этапе?

Добавлено after 4 minutes 34 seconds:
И в догонку еще один вопрос по АЦП. Указано, что The maximum speed of the STC8G series ADC is 800K for 12-bit ADC (800,000 ADC conversions per
second), and 500K for 10-bit ADC (500,000 ADC conversions per second)
Но я не вижу, чтобы в регистрах задавалась разрядность, которая мне нужна. А по окончании конвертации сразу выставляется бит ADC_FLAG в регистре ADC_CONTR.
А какая разрядность получена-то?! А если я на 24 МГц запускаю АЦП с делителем 32 (это 750 К) я что получаю?!
Экспериментальным путем я разницы в результатах не заметил.
Вложения
Снимок экрана от 2024-09-24 19-34-52.png
(108.02 КБ) 171 скачивание
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 230
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Микроконтроллеры STC: первые впечатления.

Сообщение ks0 »

Вообщем по первому вопросу более-менее понятно.
Вот здесь статья есть https://developerhelp.microchip.com/xwi ... tion-time/
В ней сказано, что sampling time требуется для заряда конденсатора, на котором будет производится измерение, и зависит от выходного импеданса источника сигнала. Регистр добавлен в STC8G или может STC8A, в ранних контроллерах его не было.
Аватара пользователя
Kabron
Встал на лапы
Сообщения: 82
Зарегистрирован: Ср дек 26, 2007 11:21:30
Контактная информация:

Re: Микроконтроллеры STC: первые впечатления.

Сообщение Kabron »

Свои 5 копеек. Отладка с помощью Monitor-51
1. Монитор загружается из оболочки программирования AIapp-ISP-vX.XXX.exe на вкладке Keil ICE Settings -> Set targe MCU as ICE
2. В Кейле на вкладке Options -> Debug выбираем STC Monitor-51 Driver. В Settings указываем порт и скорость (57600 или 115200)
3. Запускам отладку

Отладка у меня плохо работает с точками останова, зато пошагово - отлично.
octaprog
Родился
Сообщения: 19
Зарегистрирован: Ср авг 20, 2014 14:48:36

Re: Микроконтроллеры STC: первые впечатления.

Сообщение octaprog »

Искал замену AVR MCU. Почитал тему. Windows у меня нет, поэтому искал IDE for MCS-51 для Linux. Нашел "An embedded development environment for mcs51/stm8/avr/cortex-m/riscv on VsCode."
Это плагин для VsCode - "A c/c++ development environment for mcs51/stm8/cortex-m/riscv microcontrollers".
https://github.com/github0null/eide
https://em-ide.com/

В качестве компилятора можно установить SDCC.
Требуется установка NET 6 runtime (инструкция по установке dot net: https://stackoverflow.com/questions/740 ... -debian-11),
нужны aspnetcore-runtime, dotnet-runtime.

Заголовочные файлы: https://github.com/cch1997/SDCC-STC-header-file

HEX файл blink получил.
Вложения
src.tar.7z
(1.41 КБ) 132 скачивания
Аватара пользователя
Александр Д.
Встал на лапы
Сообщения: 111
Зарегистрирован: Вс май 12, 2024 12:41:38
Откуда: Подмосковье

Re: Микроконтроллеры STC: первые впечатления.

Сообщение Александр Д. »

создал раздел по STC
Пишу на Bascom-51
http://bascomavr.bbok.ru/viewforum.php?id=58
Пробовал несколько МК, очень доволен документацией!
STC8H1K08, STC8H1K28 и STC8H8K64U
Верните прошлое! там было такое прекрасное будущее...
igor48
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Re: Микроконтроллеры STC: первые впечатления.

Сообщение igor48 »

Прошу помощи! Что я делаю не так?
Установил Keil uVision5, настроил на работу с STC, решил попробовать готовые библиотеки с сайта STC.
И тут возникло непредвиденное: в процессе компиляции компилируются все добавленные в проект библиотеки, даже если они не были включены директивой #include. При этом настройка оптимизации C51 = 1 Dead Code Elimination абсолютно не помогает.
Также использую Keil для STM32 - такой фигни нет.

Идем дальше. Библиотеки вообще не причем. Все еще хуже.
Если объявить прототип и создать пустую реализацию функции, то код увеличивается на 1 байт.
Если в main() вызвать эту пустую функцию, то код увеличивается еще на 3 байта.
Я не понимаю этого.

Кто нибудь пробовал программировать MCU STC в Keil uVision5 С51 (как и рекомендует производитель)?
У вас такого нет? Какой версией Keil кто пользуется.

У меня:

µVision V5.38.0.0

Tool Version Numbers:
Toolchain: PK51 Prof. Developers Kit Version: 9.60.7.0
Toolchain Path: C:\Keil_v5\C51\BIN
C Compiler: C51.exe V9.60.7.0
Assembler: A51.exe V8.2.7.0
Linker/Locator: BL51.exe V6.22.4.0
Librarian: LIB51.exe V4.30.1.0
Hex Converter: OH51.exe V2.7.0.0
CPU DLL: S8051.DLL V3.125.1.0
Dialog DLL: DP51.DLL V2.69.0.0
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STC: первые впечатления.

Сообщение jcxz »

в процессе компиляции компилируются все добавленные в проект библиотеки, даже если они не были включены директивой #include.
Директива #include - это не про добавление библиотек. Она про другое.

Также использую Keil для STM32 - такой фигни нет.
...
Если объявить прототип и создать пустую реализацию функции, то код увеличивается на 1 байт.
А на сколько он должен увеличиваться по вашему?
Да - в STM32 пустая функция занимает 2 байта. Так как команда BX LR - 2-байтовая.
Видимо в x51 возврат из функции - 1-байтовая команда. Логично?

Если в main() вызвать эту пустую функцию, то код увеличивается еще на 3 байта.
Я не понимаю этого.
Не очень понятно - что именно вас не устраивает? И сколько вы ожидали?
Очевидно 3 байта это: 1байт(пустая_функция) + 2байта(команда_её_вызова). Логично?
igor48
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Re: Микроконтроллеры STC: первые впечатления.

Сообщение igor48 »

jcxz писал(а):Директива #include - это не про добавление библиотек. Она про другое.

Я привык к хорошему. Если библиотека и добавлена в структуру проекта, но никуда не включена директивой #include, ее и компилировать ее нечего.
jcxz писал(а):А на сколько он должен увеличиваться по вашему?
Да - в STM32 пустая функция занимает 2 байта. Так как команда BX LR - 2-байтовая.
Видимо в x51 возврат из функции - 1-байтовая команда. Логично?

Я ожидал, что если функция не вызывается, то и место ей в памяти отводить не надо.
А если вызывается пустая функция, то компилятор должен сообразить, что нет никаких действий, ничего не надо вызывать и отводить место в памяти.

Добавлено after 1 minute 36 seconds:
Повозился с этим вопросом и пришел к неутешительным выводам. Получается какое-то программирование вроде на Си, но явно в стиле ассемблера. Нельзя сказать, что оптимизация не работает вообще - размер кода на выходе меняется при изменении уровня оптимизации, но оптимизация какая-то странная:
1. Если уж создал функцию, то будь добр ее использовать. Место в памяти она будет занимать по любому.
2. Объявил переменную (обычную, не volatile) – место в памяти она будет занимать, даже если ее не использовать.
3. Объявил переменную (обычную, не volatile) и три раза подряд совершил с ней некоторые действия (например, логические операции с битовыми масками) – все это прямиком летит в исполняемый код. Компилятор совершенно не в силах просчитать и вычислить результат заранее.
4. Из-за этих особенностей практически невозможно использовать библиотеки, любезно предоставленные STC. Они написаны очень универсально и без оптимизации неиспользуемого кода занимают совершенно невменяемое количество памяти.
5. Похоже в STC ужа сами сообразили, что что-то не так. В библиотеках для STC8 (в отличии от более старых библиотек для STC15) широко используются директивы условной компиляции (чтобы хоть как-то минимизировать проблему).
6. И самое главное - из-за всего вышеизложенного делать более-менее серьезный проект для STC из-под Keil не представляется возможным.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STC: первые впечатления.

Сообщение jcxz »

Я ожидал, что если функция не вызывается, то и место ей в памяти отводить не надо.
А если вызывается пустая функция, то компилятор должен сообразить, что нет никаких действий, ничего не надо вызывать и отводить место в памяти.
Зачем гадать? Просто скомпилите проект, а затем загляните в полученные .lst-файлы и в .map-файл. Там всё должно быть видно.

6. И самое главное - из-за всего вышеизложенного делать более-менее серьезный проект для STC из-под Keil не представляется возможным.
Имхо - ядро x51 в настоящее время уже устаревшее и неактуальное. Вряд-ли стоит от компиляторо-строителей ожидать каких-то серьёзных усилий по оптимизации под него. Сами подумайте - как много народу его использует? А сколько из этого народу используют именно Кейл? А сколько из последних легально покупают этот самый Кейл, оплачивая работу разработчиков? Хрен целых 0 десятых? :))) Вы то сами его купили? :)))
А бесплатно никто работать не станет. Все кушать хотят.

PS: Если хочется поработать с 8-битниками, то имхо - лучше взять STM8. Но и на нём не стоит ожидать оптимизации кода, сравнимой с оптимизацией для ARM-процессоров.
Если же хочется максимальной оптимизации и максимальных возможностей компиляторов, то следует выбирать самые массовые ядра. Т.е.: ARM, x86, etc. Естественно что компиляторы под них максимально вылизываются.

PPS: Если же хочется максимально оптимального кода для 8-битника, то нужно садиться изучать его ассемблер.

PPPS: Кстати - то что вы хотите (исключение неиспользуемого кода/данных) - это функция оптимизации не компилятора, а компоновщика. Может стоит поискать среди ключей компоновщика - что вы не включили? Может там можно разрешить удалять неиспользуемый код/данные. Я сам давно Кейл не использовал....
igor48
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Re: Микроконтроллеры STC: первые впечатления.

Сообщение igor48 »

jcxz писал(а):Если хочется поработать с 8-битниками, то имхо - лучше взять

Да мне, собственно, хотелось именно на STC по причине их копеечной цены и наличия в корпусе DIP40. Наоборот, пранировал перести проект с другого МК.
jcxz писал(а):Если же хочется максимально оптимального кода для 8-битника, то нужно садиться изучать его ассемблер.

Хочется не максимально оптимального кода, а хотя бы чтобы неиспользуемые функции не попадали в прошивку. Я уже понял, что компилятор наверное так и застрял в 80-х.
jcxz писал(а):это функция оптимизации не компилятора, а компоновщика. Может стоит поискать среди ключей компоновщика

Я совершенно не спорю.
Чем мне казался удобен кейл, это что не надо самому заполнять make файлы и тому подобное. Поставил в нужном месте галочку - и готово.
А тут вроде и галочка на привычном месте есть, и по описанию должна делать то, что нужно, но результата нет.
Вот я и прошу подсказать, может кто знает, что мне конкретно нужно сделать. Или это так и должно быть и остается только смириться.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STC: первые впечатления.

Сообщение jcxz »

Да мне, собственно, хотелось именно на STC по причине их копеечной цены и наличия в корпусе DIP40. Наоборот, пранировал перести проект с другого МК.
Совершенно не понимаю...
Вижу - STC в DIP40 на ~600руб. Вы про него?
Так на том же али есть куча отладочных плат на STM8S103F3P6 по цене в 6 раз ниже. По размерам - примерно такой же DIP (ширина, шаг - такие же; правда ног меньше).
Ну и самое главное: STM8 имеет внутрисхемный отладчик/эмулятор. Как в ARM-ах. А значит перенос/отладка кода на нём будет на порядок проще/быстрее, чем на x51.
Да и на "народном" STM32F103 там тоже куча дешёвых плат примерно такого же размера.

Если уж переносить на другой МК, то лучше на STM8 или ARM, а не на древний неудобный x51. Смысла нет в наше время писать/адаптировать какой-то код для x51. Кроме особых случаев (типа CY7C68013A).
igor48
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Re: Микроконтроллеры STC: первые впечатления.

Сообщение igor48 »

Ну, во первых меня заинтересовала позиция 5 шт. за 500 руб.
А во вторых, наш с вами разговор потерял всякий смысл. Я прошу помощи в решении конкретной технической проблемы, если оно есть. А вы мне пытаетесь советовать куда идти и чем заняться, с чем я вполне могу справиться и сам.
Все, что вы написали в последнем сообщении, мне вполне известно.
Adrift
Вымогатель припоя
Сообщения: 539
Зарегистрирован: Вт окт 01, 2024 15:22:33

Re: Микроконтроллеры STC: первые впечатления.

Сообщение Adrift »

У меня:

µVision V5.38.0.0

Linker/Locator: BL51.exe V6.22.4.0

Тут такое написано: Linker optimizations are performed by the LX51 Linker only. The BL51 Linker does not perform any optimizations.
igor48
Прорезались зубы
Сообщения: 246
Зарегистрирован: Пт ноя 22, 2013 22:06:15
Откуда: Липецк

Re: Микроконтроллеры STC: первые впечатления.

Сообщение igor48 »

Adrift писал(а):Linker optimizations are performed by the LX51 Linker only

Вы мне подали такую надежду!
Переключился на использование LX51, но ... что-то ничего не изменилось, хотя LX51 четко выдает лог своей работы.
Вот досадно.
Аватара пользователя
ks0
Прорезались зубы
Сообщения: 230
Зарегистрирован: Чт фев 28, 2013 14:16:10

Re: Микроконтроллеры STC: первые впечатления.

Сообщение ks0 »

Компилятор не вырезает неиспользуемые функции, т.к. не знает будет ли она использоваться или нет, возможно к ней будет вызов из другого файла. Он же для каждого си-файла делает свой объектный файл.
Задача убрать неиспользуемые функции лежит на компоновщике, надо его ключи смотреть.
дед-код элиминейш работает всегда по умолчанию, если вы, например, сделал int a=10, а потом сразу a=20, то компилятор первое присваивание уберет. Также недостижимые блоки внутри функции тоже уберет, например
if(a>10) ...
else if(a<=10) ...
else что-то уже уберет, если а не volatile.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Микроконтроллеры STC: первые впечатления.

Сообщение jcxz »

Компилятор не вырезает неиспользуемые функции, т.к. не знает будет ли она использоваться или нет, возможно к ней будет вызов из другого файла. Он же для каждого си-файла делает свой объектный файл.
Задача убрать неиспользуемые функции лежит на компоновщике, надо его ключи смотреть.
Чтобы компоновщик мог вырезать неиспользуемые функции/данные, надо чтобы компилятор создавал для каждой такой функции или блока данных отдельную секцию. Только в этом случае компоновщик сможет удалить её (так как манипулирует входными секциями целиком и не может вырезать из них куски). Вот такой ключ (помещать каждую функцию в отдельную свою секцию .obj-файла) и нужно найти и включить в компиляторе.
Иначе - для каждого файла исходного кода генерится одна секция. В которой находятся код всех функций этого файла в виде единой секции. И если хотя-бы одна из функций этой секции где-то используется, то вся секция будет включена в выходной образ прошивки. Даже если там 99 функций - не используется, а используется только одна.
С другой стороны - с точки зрения оптимальности (минимального размера кода) оптимальнее создавать единую секцию кода на один исходный файл. Поэтому - как именно будет поступать компилятор - неизвестно. Может поступать так или иначе. В зависимости от ключей оптимизации или каких-то своих внутренних правил.

Так что в общем случае - отключение неиспользуемого кода при помощи препроцессора (#if...#endif) должно давать более компактный код в любом случае. Так как в этом случае: ненужный код исключается на этапе препроцессинга (компилятором); бОльшее число функций объединяется в более крупные секции .obj-файла; код становится короче и быстрее за счёт оптимизации размерностей переходов/вызовов п/п. Особенно это касается слабых 8-битников.

Добавлено after 3 minutes 42 seconds:
дед-код элиминейш работает всегда по умолчанию, если вы, например, сделал int a=10, а потом сразу a=20, то компилятор первое присваивание уберет.
Современные оптимизирующие компиляторы - да. Но ядро x51 - устаревшее. Вряд ли у компиляторостроителей есть желание упираться ради мало кому нужного ядра. Поэтому не факт, что текущие компиляторы x51 делают даже такие простые оптимизации.
Писал уже выше об этом.
Аватара пользователя
smacorp
Друг Кота
Сообщения: 3471
Зарегистрирован: Вт окт 22, 2013 04:37:23
Откуда: Казань

Re: Микроконтроллеры STC: первые впечатления.

Сообщение smacorp »

Довольно странно видеть "страдания" по поводу недостаточной "умности" компилятора. Кто, как не сам программист, должен следить за ненужными функциями и неиспользуемыми переменными?! Есть подсказки компилятора о unused - хорошо, нет - сидим и самостоятельно вылизываем код, что можно делать хоть "глазками", хоть самодельным парсером. А если подобные сложности вызывают негативные эмоции, это повод задуматься о переквалификации в рубщики дров - одна из немногих профессий, где никогда (или редко) нужно заботиться об уборке за собой мусора.
Платы для HLDI - установки лазерной засветки фоторезиста.
Фоторезист Ordyl Alpha 350
Жидкое олово для лужения плат (видео) - самое лучшее и только у меня.
Паяльные маски XV501T-4 и KSM-S6189 (5 цветов).
Заказ печатных плат - pcbsmac@gmail.com
Аватара пользователя
Александр Д.
Встал на лапы
Сообщения: 111
Зарегистрирован: Вс май 12, 2024 12:41:38
Откуда: Подмосковье

Re: Микроконтроллеры STC: первые впечатления.

Сообщение Александр Д. »

Кто, как не сам программист, должен следить за ненужными функциями и неиспользуемыми переменными?!
Как кто? Компьютер, ав-то-ма-ти-чес-ки!

Есть подсказки компилятора о unused - хорошо, нет - сидим и самостоятельно вылизываем код, что можно делать хоть "глазками"
"Камень мощный, успеет" (знакомый молодой разработчик)

повод задуматься о переквалификации в рубщики дров
Эх. Сразу видна "старая школа".
Сейчас время-деньги!
"да не хочу я разбираться в этих регистрах! Скачал библиотеку- там всё есть. А что лишнего много и память жрёт как не в себе - так взял STM32 помощнее и всё ОК! Клиент заплатит, куда денется! Зато быстро сделал!" (всё тот же молодой знакомый)
Верните прошлое! там было такое прекрасное будущее...
Ответить

Вернуться в «Разные вопросы по МК»