Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Вс ноя 11, 2018 20:32:12

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

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

и без разницы, иар или что другое. Это язык C.

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

Вс ноя 11, 2018 20:52:13

А куда Вы 8 бит 16 раз сдвигаете?

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

Вс ноя 11, 2018 21:50:08

alex38779 писал(а):При сдвиге байта на 16
А где логика в сие действие ? :facepalm:
union вам в помощь. И никаких сдвигов делать не придётся.

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

Ср ноя 21, 2018 07:25:13

есть ли у кого рабочий пример бутлоадера?
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик

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

Чт ноя 22, 2018 06:34:19

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

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

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

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

Так как по памяти, мог чего приврать. Но в целом как-то так. 8)

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

Чт ноя 22, 2018 07:58:56

Спасибо

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

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

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

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

Чт ноя 22, 2018 08:30:31

Ссылку влом читать, не до STM8. Я сделал загрузчик в конец, чтобы загрузчик располагался в области памяти программ со включенной защитой от перезаписи. Если включить защиту памяти программ в начале, то как вектора править? Может в других STM8 вектора переносятся, в моем детском STM8S103 этого делать нельзя.

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

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

Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.

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

Вт дек 18, 2018 01:11:03

Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.

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

Вт дек 18, 2018 05:28:29

Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.
А проиводитель что говорит? Не может же он не рекомендовать средства разработки.

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

Ср дек 19, 2018 17:35:04

STM8S001J3 Нужна помощь в написание небольшой программы, не бесплатно. Все вопросы в личку.

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

Пт мар 01, 2019 07:43:34

есть кто из Владивостока кто для STM8 програмирует,,???

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

Вс мар 10, 2019 13:30:32

Добрый день. Подскажите чайнику по 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

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

Вс мар 10, 2019 13:49:06

SarCity писал(а):На какой адрес будет ссылаться при значении AA, C2 ?
Лично я вопрос не понял. При изменении АА на С2? Кто будет ссылаться на адрес?

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

Вс мар 10, 2019 13:51:51

callf $19301

"Огласите весь список, пожалуйста!" (с)
Что происходит в данной подпрограмме?

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

Вс мар 10, 2019 13:53:37

ПростоНуб писал(а):Что происходит в данной подпрограмме?
Думаю не знает. Судя по листингу - дизассемблер.

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

Вс мар 10, 2019 14:00:16

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

0xAA как-то должно преобразоваться и далее уже *0x20+0x95C1=адрес

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

Вс мар 10, 2019 14:16:07

я думаю, не важно.

Это очень важно, так как, если функция возвращает знаковый или беззнаковый байт, то большинство компиляторов используют для этого аккумулятор.

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

Вс мар 10, 2019 14:20:11

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


Код:
ld A, #$AA
ld $983,A

Видимо присвоение какой-то переменной значение АА.

Код:
callf $19301
Данная подпрограмма вероятно изменяет аккумулятор А и XH.

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

Вс мар 10, 2019 14:29:41

Вот что находится в 0x19301.

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

Вс мар 10, 2019 14:42:19

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

Добавлено after 1 minute 30 seconds:
Вот что находится в 0x19301.
А там еще вызов подпрограммы.

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