Программирование STM8
Re: Программирование STM8
Сначала все операнды привести к 32-х битному виду и тогда объединять. типа
result = ((uint32_t)data3 << 24) | ((uint32_t)data2 << 16) | ((uint32_t)data1 << 8) | ((uint32_t)data0 << 0);
и без разницы, иар или что другое. Это язык C.
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
А куда Вы 8 бит 16 раз сдвигаете?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Программирование STM8
А где логика в сие действие ?alex38779 писал(а):При сдвиге байта на 16
union вам в помощь. И никаких сдвигов делать не придётся.
Re: Программирование STM8
есть ли у кого рабочий пример бутлоадера?
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик
предпочтительно на Си/С++
хочу написать загрузчик из внешней eeprom, куда прошивку предварительно запишет основная прошивка
но для примера подойдет любой загрузчик
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Расскажу по памяти как делал.
1. Написал скрипт линкера такой, что вектора остались на месте (я их не нашел как переносить в STM8), а все остальное разместилось в самом конце памяти программ. Все остальное это сам загрузчик. При том , для этой области памяти была включена защита от записи, т.е. от случайной порчи.
2. Основной проект собирался со скриптом линкера по умолчанию.
При запуске МК. Запускался загрузчик, и ждал от UART некой команды, если таковой не было, то передавалось управление основной программе, по адресу записанному в еепром.
Если эта некая команда приходила, то опять же по некому протоколу через UART, то загрузчик начинал обновлять всю программу. Только не правил вектор сброса, а записывал его в еепром.
Что в STM8 прикольно, область флеш не надо стирать страницами, работаешь как с еепром побайтно.
Из самых явных недостатков, остается вероятность случайно порчи вектора сброса.
Так как по памяти, мог чего приврать. Но в целом как-то так.
1. Написал скрипт линкера такой, что вектора остались на месте (я их не нашел как переносить в STM8), а все остальное разместилось в самом конце памяти программ. Все остальное это сам загрузчик. При том , для этой области памяти была включена защита от записи, т.е. от случайной порчи.
2. Основной проект собирался со скриптом линкера по умолчанию.
При запуске МК. Запускался загрузчик, и ждал от UART некой команды, если таковой не было, то передавалось управление основной программе, по адресу записанному в еепром.
Если эта некая команда приходила, то опять же по некому протоколу через UART, то загрузчик начинал обновлять всю программу. Только не правил вектор сброса, а записывал его в еепром.
Что в STM8 прикольно, область флеш не надо стирать страницами, работаешь как с еепром побайтно.
Из самых явных недостатков, остается вероятность случайно порчи вектора сброса.
Так как по памяти, мог чего приврать. Но в целом как-то так.
- Реклама
Re: Программирование STM8
Спасибо
Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Нашел реализацию похожей на мою задачи http://we.easyelectronics.ru/STM8/bootl ... zduhu.html
Но там загрузчик как раз в начале, а основной проект сдвигается
В этом варианте так понимаю вектор сброса находится в области загрузчикаи его нельзя испортить при загрузке основной программы?
И как защитить кусок флэша от записи?
Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Нашел реализацию похожей на мою задачи http://we.easyelectronics.ru/STM8/bootl ... zduhu.html
Но там загрузчик как раз в начале, а основной проект сдвигается
В этом варианте так понимаю вектор сброса находится в области загрузчикаи его нельзя испортить при загрузке основной программы?
И как защитить кусок флэша от записи?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Программирование STM8
Ссылку влом читать, не до STM8. Я сделал загрузчик в конец, чтобы загрузчик располагался в области памяти программ со включенной защитой от перезаписи. Если включить защиту памяти программ в начале, то как вектора править? Может в других STM8 вектора переносятся, в моем детском STM8S103 этого делать нельзя.
Вектор представляет собой спец команду INT, применяется только в таблице векторов. Опкод 82xxxxxx где иксы адрес.
При рестатре МК, он сразу и выполняется.
Я же писал. Загрузчик у меня отдельный проект, со своим скриптом линковщика. А так как под исполняемый код был выделен регион в хвосте памяти, то и вектор сброса автоматически "компилился" на него.
Этот проект загрузчика зашивался программатором.
Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.
Вектор сброса , там же где все остальные вектора, по адресу 0x8000 и каждый вектор занимает 4 байта, Раздел Interrupt mapping ДШ.Можно уточнить про загрузчик в хвосте памяти?
Как он получает управление, где этот вектор сброса?
Вектор представляет собой спец команду INT, применяется только в таблице векторов. Опкод 82xxxxxx где иксы адрес.
При рестатре МК, он сразу и выполняется.
Я же писал. Загрузчик у меня отдельный проект, со своим скриптом линковщика. А так как под исполняемый код был выделен регион в хвосте памяти, то и вектор сброса автоматически "компилился" на него.
Этот проект загрузчика зашивался программатором.
Другой основной проект собирался отдельно от загрузчика. Загручзчик получал бинарник и прошивал им память, но не трогал вектор сброса, а вектор сброса основного проекта запоминал в еепром, чтобы знать куда передавать управление. Но это я повторяюсь.
Re: Программирование STM8
Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Программирование STM8
[uquote="borskiy",url="/forum/viewtopic.php?p=3529107#p3529107"]Помогите освоить вот этого зверя STM8S001J3 Какой программой пользоваться, чем и как прошивать.[/uquote]А проиводитель что говорит? Не может же он не рекомендовать средства разработки.
Re: Программирование STM8
STM8S001J3 Нужна помощь в написание небольшой программы, не бесплатно. Все вопросы в личку.
-
evgenii_stm
- Родился
- Сообщения: 1
- Зарегистрирован: Пт мар 01, 2019 07:37:59
Re: Программирование STM8
есть кто из Владивостока кто для STM8 програмирует,,???
- SarCity
- Прорезались зубы
- Сообщения: 215
- Зарегистрирован: Вт июн 10, 2008 09:17:06
- Откуда: г. Саратов
- Контактная информация:
Re: Программирование STM8
Добрый день. Подскажите чайнику по 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
Есть кусок кода, изменение значения "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
Лично я вопрос не понял. При изменении АА на С2? Кто будет ссылаться на адрес?SarCity писал(а):На какой адрес будет ссылаться при значении AA, C2 ?
- ПростоНуб
- Собутыльник Кота
- Сообщения: 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
Думаю не знает. Судя по листингу - дизассемблер.ПростоНуб писал(а):Что происходит в данной подпрограмме?
- SarCity
- Прорезались зубы
- Сообщения: 215
- Зарегистрирован: Вт июн 10, 2008 09:17:06
- Откуда: г. Саратов
- Контактная информация:
Re: Программирование STM8
Да, это дизассемблированная прошивка.
Что происходит в callf $19301 я не знаю, да и данном случае это, я думаю, не важно.
0xAA как-то должно преобразоваться и далее уже *0x20+0x95C1=адрес
Что происходит в 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
SarCity писал(а):Что происходит в callf $19301 я не знаю, да и данном случае это, я думаю, не важно.
Код: Выделить всё
ld A, #$AA
ld $983,AКод: Выделить всё
callf $19301- SarCity
- Прорезались зубы
- Сообщения: 215
- Зарегистрирован: Вт июн 10, 2008 09:17:06
- Откуда: г. Саратов
- Контактная информация:
Re: Программирование STM8
Вот что находится в 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
SarCity писал(а):далее уже *0x20+0x95C1=адрес
986 адрес, по которому запишется значения регистровой пары Х.SarCity писал(а):ldw $986,X
Добавлено after 1 minute 30 seconds:
[uquote="SarCity",url="/forum/viewtopic.php?p=3587458#p3587458"]Вот что находится в 0x19301.[/uquote] А там еще вызов подпрограммы.
Добавлено after 7 minutes 16 seconds:
попрограмма не вся. Но судя по всему значение А не изменяет. Возможно результат ее работы в XH.SarCity писал(а):Вот что находится в 0x19301.



