Программирование STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Re: Программирование STM8

Сообщение uldemir »

Сначала все операнды привести к 32-х битному виду и тогда объединять. типа

result = ((uint32_t)data3 << 24) | ((uint32_t)data2 << 16) | ((uint32_t)data1 << 8) | ((uint32_t)data0 << 0);

и без разницы, иар или что другое. Это язык C.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

А куда Вы 8 бит 16 раз сдвигаете?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Программирование STM8

Сообщение Аlex »

alex38779 писал(а):При сдвиге байта на 16
А где логика в сие действие ? :facepalm:
union вам в помощь. И никаких сдвигов делать не придётся.
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

есть ли у кого рабочий пример бутлоадера?
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

Расскажу по памяти как делал.
1. Написал скрипт линкера такой, что вектора остались на месте (я их не нашел как переносить в STM8), а все остальное разместилось в самом конце памяти программ. Все остальное это сам загрузчик. При том , для этой области памяти была включена защита от записи, т.е. от случайной порчи.
2. Основной проект собирался со скриптом линкера по умолчанию.

При запуске МК. Запускался загрузчик, и ждал от UART некой команды, если таковой не было, то передавалось управление основной программе, по адресу записанному в еепром.

Если эта некая команда приходила, то опять же по некому протоколу через UART, то загрузчик начинал обновлять всю программу. Только не правил вектор сброса, а записывал его в еепром.

Что в STM8 прикольно, область флеш не надо стирать страницами, работаешь как с еепром побайтно.
Из самых явных недостатков, остается вероятность случайно порчи вектора сброса.

Так как по памяти, мог чего приврать. Но в целом как-то так. 8)
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
axillent
Электрический кот
Сообщения: 1040
Зарегистрирован: Вс сен 25, 2011 19:09:33

Re: Программирование STM8

Сообщение axillent »

Спасибо

Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?

Нашел реализацию похожей на мою задачи http://we.easyelectronics.ru/STM8/bootl ... zduhu.html

Но там загрузчик как раз в начале, а основной проект сдвигается
В этом варианте так понимаю вектор сброса находится в области загрузчикаи его нельзя испортить при загрузке основной программы?
И как защитить кусок флэша от записи?
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

Ссылку влом читать, не до STM8. Я сделал загрузчик в конец, чтобы загрузчик располагался в области памяти программ со включенной защитой от перезаписи. Если включить защиту памяти программ в начале, то как вектора править? Может в других STM8 вектора переносятся, в моем детском STM8S103 этого делать нельзя.
Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Вектор сброса , там же где все остальные вектора, по адресу 0x8000 и каждый вектор занимает 4 байта, Раздел Interrupt mapping ДШ.
Вектор представляет собой спец команду INT, применяется только в таблице векторов. Опкод 82xxxxxx где иксы адрес.
При рестатре МК, он сразу и выполняется.
Я же писал. Загрузчик у меня отдельный проект, со своим скриптом линковщика. А так как под исполняемый код был выделен регион в хвосте памяти, то и вектор сброса автоматически "компилился" на него.
Этот проект загрузчика зашивался программатором.

Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
borskiy
Родился
Сообщения: 12
Зарегистрирован: Вс окт 18, 2015 18:24:35
Откуда: Нижний Новгород

Re: Программирование STM8

Сообщение borskiy »

Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Программирование STM8

Сообщение VladislavS »

[uquote="borskiy",url="/forum/viewtopic.php?p=3529107#p3529107"]Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.[/uquote]А проиводитель что говорит? Не может же он не рекомендовать средства разработки.
borskiy
Родился
Сообщения: 12
Зарегистрирован: Вс окт 18, 2015 18:24:35
Откуда: Нижний Новгород

Re: Программирование STM8

Сообщение borskiy »

STM8S001J3 Нужна помощь в написание небольшой программы, не бесплатно. Все вопросы в личку.
evgenii_stm
Родился
Сообщения: 1
Зарегистрирован: Пт мар 01, 2019 07:37:59

Re: Программирование STM8

Сообщение evgenii_stm »

есть кто из Владивостока кто для STM8 програмирует,,???
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Re: Программирование STM8

Сообщение SarCity »

Добрый день. Подскажите чайнику по STM8.
Есть кусок кода, изменение значения "AA" в строке ld A, #$AA меняет функционал прошивки. На какой адрес будет ссылаться при значении AA, C2 ?

push A
ld A, #$AA
ld $983,A
callf $19301
ld XL, A
ld A, #$20
mul X, A
addw X, #$95c1
ldw $986,X
pop A
retf
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

SarCity писал(а):На какой адрес будет ссылаться при значении AA, C2 ?
Лично я вопрос не понял. При изменении АА на С2? Кто будет ссылаться на адрес?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Программирование STM8

Сообщение ПростоНуб »

[uquote="SarCity",url="/forum/viewtopic.php?p=3587384#p3587384"]callf $19301[/uquote]
"Огласите весь список, пожалуйста!" (с)
Что происходит в данной подпрограмме?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

ПростоНуб писал(а):Что происходит в данной подпрограмме?
Думаю не знает. Судя по листингу - дизассемблер.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Re: Программирование STM8

Сообщение SarCity »

Да, это дизассемблированная прошивка.
Что происходит в callf $19301 я не знаю, да и данном случае это, я думаю, не важно.

0xAA как-то должно преобразоваться и далее уже *0x20+0x95C1=адрес
Аватара пользователя
ПростоНуб
Собутыльник Кота
Сообщения: 2723
Зарегистрирован: Пт сен 07, 2018 20:20:02
Откуда: деревня в Тульской губернии

Re: Программирование STM8

Сообщение ПростоНуб »

[uquote="SarCity",url="/forum/viewtopic.php?p=3587427#p3587427"]я думаю, не важно.[/uquote]
Это очень важно, так как, если функция возвращает знаковый или беззнаковый байт, то большинство компиляторов используют для этого аккумулятор.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

SarCity писал(а):Что происходит в callf $19301 я не знаю, да и данном случае это, я думаю, не важно.
:facepalm:

Код: Выделить всё

ld A, #$AA
ld $983,A
Видимо присвоение какой-то переменной значение АА.

Код: Выделить всё

callf $19301
Данная подпрограмма вероятно изменяет аккумулятор А и XH.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
SarCity
Прорезались зубы
Сообщения: 215
Зарегистрирован: Вт июн 10, 2008 09:17:06
Откуда: г. Саратов
Контактная информация:

Re: Программирование STM8

Сообщение SarCity »

Вот что находится в 0x19301.
Спойлер

Код: Выделить всё

0x19301:  88             push A                                   cycles=1
0x19302:  a0 30          sub A, #$30                              cycles=1
0x19304:  a1 0c          cp A, #$0c                               cycles=1
0x19306:  24 1c          jrnc $19324  (offset=28)                 cycles=1-2
0x19308:  8d 01 a9 fe    callf $1a9fe                             cycles=5
0x1930c:  01             rrwa X, A                                cycles=1
0x1930d:  46             rrc A                                    cycles=1
0x1930e:  01             rrwa X, A                                cycles=1
0x1930f:  4a             dec A                                    cycles=1
0x19310:  01             rrwa X, A                                cycles=1
0x19311:  4e             swap A                                   cycles=1
0x19312:  01             rrwa X, A                                cycles=1
0x19313:  52 01          sub SP, #$01                             cycles=1
0x19315:  56             rrcw X                                   cycles=2
0x19316:  01             rrwa X, A                                cycles=1
0x19317:  5a             decw X                                   cycles=1
0x19318:  01             rrwa X, A                                cycles=1
0x19319:  5e             swapw X                                  cycles=1
0x1931a:  01             rrwa X, A                                cycles=1
0x1931b:  62             div X, A                                 cycles=2-17
0x1931c:  01             rrwa X, A                                cycles=1
0x1931d:  66 01          rrc ($01,X)                              cycles=1
0x1931f:  6a 01          dec ($01,X)                              cycles=1
0x19321:  6e 01          swap ($01,X)                             cycles=1
0x19323:  72 a0          ???                                      cycles=?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Программирование STM8

Сообщение Z_h_e »

SarCity писал(а):далее уже *0x20+0x95C1=адрес
SarCity писал(а):ldw $986,X
986 адрес, по которому запишется значения регистровой пары Х.

Добавлено after 1 minute 30 seconds:
[uquote="SarCity",url="/forum/viewtopic.php?p=3587458#p3587458"]Вот что находится в 0x19301.[/uquote] А там еще вызов подпрограммы.

Добавлено after 7 minutes 16 seconds:
SarCity писал(а):Вот что находится в 0x19301.
попрограмма не вся. Но судя по всему значение А не изменяет. Возможно результат ее работы в XH.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Ответить

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