Программирование STM8
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: Программирование STM8
а ни кто не знает по чем космик для предприятий?
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
- DrWatson
- Опытный кот
- Сообщения: 890
- Зарегистрирован: Вт янв 20, 2009 14:49:08
- Откуда: Гондурас, Мурманск
Re: Программирование STM8
Судя по тому, что у Raisonance профессиональная версия Ride7 стоит 990 евро, думаю у космика цена не сильно отличается.
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Да это понятно, я с "или" и начинал, просто уже всё подряд пробовал и последнее в форум и процитировал. С "или" у него даже хуже вышло, тоже с rlwa/rrwa (и ведь знает, гад, эти команды, почему не использовал их так, как я после двух дней чтения доки на STM8 смог?).DrWatson писал(а):Использование ИЛИ вместо сложения как минимум уберет условный переход и формирование переноса. Вообще в данном случае использование сложения незачем.
Вариант с разбивкой на байты и занесением через указатель... В принципе, можно слепить такой макрос LOAD_SFRW(var,sfraddr) и им пользоваться. Но там дальше с этой локальной переменной дальше вычисления идут, принудительно кидать её в память означает вязать руки оптимизатору. Хотя такому оптимизатору... Да и не люблю я такие привяки с тех пор, когда пришлось для AVOCET C51 15+ лет назад лепить
Код: Выделить всё
#define EQU(a,b) (((a)^(b))==0)
if (EQU(a,b)) {...}
Неправильно это, так прогибаться перед компилятором. А через пару лет, когда его поправят -- опять макросы и привычки менять.
Последняя капля от IAR:
Код: Выделить всё
PB_ODR_ODR5 = 1; // BSET нужный_адрес, 5
PB_ODR_ODR5 = 0; // BCLR нужный_адрес, 5Код: Выделить всё
PB_ODR_ODR5 = ~PB_ODR_ODR5;
PB_ODR_ODR5 = !PB_ODR_ODR5;
PB_ODR ^= (1 << 5);Космики с резонансами выглядят лучше.
IAR, конечно, допилят со временем, но...
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Ой как хорошо! Локальные на стеке!Zheleznjakov писал(а):с локальнымиКод: Выделить всё
main.c:34 ++uu;
0x80f9 <main+2> 0x0C01 INC (0x01,SP) INC (0x01,SP)
main.c:36 BYTES(ticks)[1] = TIM3->CNTRH;
0x80fb <main+4> 0xC6528C LD A,0x528c LD A,0x528c
0x80fe <main+7> 0x6B04 LD (0x04,SP),A LD (0x04,SP),A
main.c:37 BYTES(ticks)[0] = TIM3->CNTRL;
0x8100 <main+9> 0xC6528D LD A,0x528d LD A,0x528d
0x8103 <main+12> 0x6B03 LD (0x03,SP),A
IAR придумал себе «виртуальные регистры» -- 16 байт в начале области короткой адресации, в смысле в самом начале ОЗУ, выделены в секцию .vregs, в которой размечено шестнадцать байтовых "регистров", накрывающихся восемью словными и четырьмя двухсловными. Везде, где не хватает A,X,Y -- используются эти виртуальные регистры.
Из-за этого на входе в обработчик прерываний стоит горсть push тих байтов вместо
SUB SP, #сколько_надо_для_локальных_обработчика ...
Из-за этого контекст вырос, переключение задач (речь идёт о порте scmRTOS под STM8) резко удлинняется...
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
С виртуальными регистрами -- похоже, они решил так себе упростить жизнь, у AVR/MCS51/ARM/... регистров валом и середина компилятора может быть просто рассчитана на их наличие.
Если так, а не какая-то умная задумка, которую я ещё не понял и не вижу от неё выиграша, то ждать улучшений не приходится, модель работы компилятора -- не оптимизатор, меняться не будет.
Да, кстати, показали космик, а резонанса нету?
Если так, а не какая-то умная задумка, которую я ещё не понял и не вижу от неё выиграша, то ждать улучшений не приходится, модель работы компилятора -- не оптимизатор, меняться не будет.
Да, кстати, показали космик, а резонанса нету?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- DrWatson
- Опытный кот
- Сообщения: 890
- Зарегистрирован: Вт янв 20, 2009 14:49:08
- Откуда: Гондурас, Мурманск
Re: Программирование STM8
А может у IAR есть какая-то настройка, чтобы локальные переменные на стек кидались?
Raisonance скачал, но не ставил, поскольку любовь к халяве на генетическом уровне заставила искать пилюлю, которая быстрее нашлась для космика. (Может и не понадобится, но "шоб було"))
ЗЫ: А что мешает на другом компиляторе писать? (Хотя, если деньги "уплочены", то придется, иначе можно и триал от резонанса использовать, если кода не больше 32к).
Raisonance скачал, но не ставил, поскольку любовь к халяве на генетическом уровне заставила искать пилюлю, которая быстрее нашлась для космика. (Может и не понадобится, но "шоб було"))
ЗЫ: А что мешает на другом компиляторе писать? (Хотя, если деньги "уплочены", то придется, иначе можно и триал от резонанса использовать, если кода не больше 32к).
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
- DrWatson
- Опытный кот
- Сообщения: 890
- Зарегистрирован: Вт янв 20, 2009 14:49:08
- Откуда: Гондурас, Мурманск
Re: Программирование STM8
Zheleznjakov писал(а):мне проще вот так оборачивать (ещё с авр-ки ползет)Код: Выделить всё
#define BYTES(Value) ((uint8_t *) & (Value))
и применять логичнее
А я б завернул так (для работы с байтами двухбайтных):
Код: Выделить всё
#define HI(Val) (*((unsigned char *) &(Val)))
#define LO(Val) (*((unsigned char *) (&(Val))+1))
HI(ticks)=TIM3_CNTRH;
LO(ticks)=TIM3_CNTRL;
Блин надо это запомнить или куда-то записать )))
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Меняется только количество виртуальных регистров -- 12 или 16 байт.DrWatson писал(а):А может у IAR есть какая-то настройка, чтобы локальные переменные на стек кидались?
Исходя из того, что размер секции .vregs по map-е от этой настройки не зависит, я подозреваю, что у библиотеки на этот счёт может быть своё мнение (кстати, при «просьбе кинуть на стек» и библиотеки подменять нужно было бы).
По поводу IAR -- да никаких проблем, просто человек, попросивший меня «спортить» scmRTOS, просил IAR.
Но без фанатизьмы, эта тема уже заставила задуматься
Мне так вообще всё равно, я в ближайшее время stm8 не собираюсь нигде ставить. Разве что
Юридический и технический вопросы.DrWatson писал(а):можно и триал от резонанса использовать, если кода не больше 32к.
Юр: как там с триалом -- в серию можно на нём делать?
Техн: оно только под win ?
Исключительно из соображений «чтобы не даром толочься вокруг stm8» мне сейчас есть куда поставить STM8L151 (нужны 12 бит АЦП и ЦАП), кода там врядли больше 8К будет. Но туда с тем же успехом и ~в те же деньги станет STM32F100.
Компилироваться будет тем же gcc и зашиваться той же FT2232 и под той же убунтой, что и для STM32F103, который в том же изделии будет стоять. Да, у него и АЦП и ЦАП будут, но там удобнее и логичнее часть работы вынести на другую плату со своим микроконтроллером.
Так что для оправдания возни с STM8 можно туда его поставить, но только если это не потребует большого дополнительного геморроя.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- DrWatson
- Опытный кот
- Сообщения: 890
- Зарегистрирован: Вт янв 20, 2009 14:49:08
- Откуда: Гондурас, Мурманск
Re: Программирование STM8
С триалом коммерческие проекты, думаю вряд-ли. Насколько я понимаю он чисто для ознакомления, изучения.
Экономически и тд целесообразнее ИМХО делать весь проект на кортексах - одна среда, один программатор и т.п.
На счет Ride7 и COSMIC под линукс не помню (не задавался этим вопросом), на их сайтах я думаю эта информация должна быть.
Экономически и тд целесообразнее ИМХО делать весь проект на кортексах - одна среда, один программатор и т.п.
На счет Ride7 и COSMIC под линукс не помню (не задавался этим вопросом), на их сайтах я думаю эта информация должна быть.
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: Программирование STM8
DrWatson писал(а):Zheleznjakov писал(а):мне проще вот так оборачивать (ещё с авр-ки ползет)Код: Выделить всё
#define BYTES(Value) ((uint8_t *) & (Value))
и применять логичнее
А я б завернул так (для работы с байтами двухбайтных):Код: Выделить всё
#define HI(Val) (*((unsigned char *) &(Val)))
#define LO(Val) (*((unsigned char *) (&(Val))+1))
HI(ticks)=TIM3_CNTRH;
LO(ticks)=TIM3_CNTRL;
Блин надо это запомнить или куда-то записать )))
не совсем удобно, а если переменная 32 бита?
Код: Выделить всё
uint32_t ticks;
BYTES(ticks)[1] = TIM3->CNTRH;
BYTES(ticks)[0] = TIM3->CNTRL;
BYTES(ticks)[2] = TIM3->CNTRH;
BYTES(ticks)[3] = TIM3->CNTRL;у меня их два:
Код: Выделить всё
#define BYTES(value) ((uint8_t *) & (value))
#define WORDS(value) ((uint16_t *) & (value))С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
В том-то и дело.DrWatson писал(а):Экономически и тд целесообразнее ИМХО делать весь проект на кортексах - одна среда, один программатор и т.п.
Хотя «одна среда» (GCC + C::B или эклипса, наконец-то) и «один программатор» (FT2232) возможны и для связки Cortex-M3 + AVR
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Не так всё страшно (контекст всё равно переключается ощутимо быстрее, чем для AVR при той же тактовой) и не так всё просто.avreal писал(а):Из-за этого на входе в обработчик прерываний стоит горсть push тих байтов вместо
SUB SP, #сколько_надо_для_локальных_обработчика ...
Из-за этого контекст вырос, переключение задач (речь идёт о порте scmRTOS под STM8) резко удлинняется...
У STM8 не нашлось адресации, косвенной по ячейке со смещением к стеку. Т.е. чего-то такого [(offset,SP)].
А вот по ячейке памяти косвенно [shortmem.w] и косвенно-индексно ([shortmem,w],X) обращаться можно. Виртуальные регистры дают кучку указателей c достаточно компактным и быстрым обращением без дёрганья туда-сюда X/Y.
Так что после допиливания оптимизатора должно быть нормально. Только вот когда?
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Ну вот первая прикидка scmRTOS STM8/IAR
Сделано сразу под scmRTOS v4.00, но пока:
- переключатель контекстов только прямым вызовом
- нет возможности задать отдельный стек для прерываний
Модели памяти кода работают все.
Модель памяти данных LARGE очень уж неэффективна (код примера 1-EventFlag распухает с ~1850 байт до ~3050), так что не вижу причин и заморачиваться с ней.
Примеры 1-EventFlag (в объёме этой статьи, чтобы легче сравнивать с AVR) и 4-Debug (пример использования новых возможностей ОС v4.00) рабочие. Только при максимальной оптимизации на скорость 4-Debug показывает цену на дрова, а не % времени. При максимальной-сбалансированной, максимальной-на-размер, средней -- всё нормально.
Глюк мой или компилятора -- ещё не разбирался.
p.s. Оно «в процессе», я уже сократил на несколько байт и тактов
переключатель контекста, где-то что-то по мелочам подправил... Но всё то мелочи и архив на сайте пока не менял. Что-то существнное будет, тогда уже дополню.
Сделано сразу под scmRTOS v4.00, но пока:
- переключатель контекстов только прямым вызовом
- нет возможности задать отдельный стек для прерываний
Модели памяти кода работают все.
Модель памяти данных LARGE очень уж неэффективна (код примера 1-EventFlag распухает с ~1850 байт до ~3050), так что не вижу причин и заморачиваться с ней.
Примеры 1-EventFlag (в объёме этой статьи, чтобы легче сравнивать с AVR) и 4-Debug (пример использования новых возможностей ОС v4.00) рабочие. Только при максимальной оптимизации на скорость 4-Debug показывает цену на дрова, а не % времени. При максимальной-сбалансированной, максимальной-на-размер, средней -- всё нормально.
Глюк мой или компилятора -- ещё не разбирался.
p.s. Оно «в процессе», я уже сократил на несколько байт и тактов
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
-
qwerky
- Мучитель микросхем
- Сообщения: 487
- Зарегистрирован: Пт июн 12, 2009 19:17:35
- Контактная информация:
Re: Программирование STM8
нет пока ничегоDrWatson писал(а):На счет Ride7 и COSMIC под линукс не помню
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Программирование STM8
Хех... Ну вот нашлось опять немного времени для темы «scmRTOS для STM8»...DrWatson писал(а):А что мешает на другом компиляторе писать?
Глянул ближе на COSMIC, а он без плюсов. Я среди всех этих gcc/IAR/Keil уже как-от отвык от такого
На С-шный их компилятор для общего развития посмотрю, конечно. Но «космического порта scmRTOS» не будет.
Хочу gcc/stm8
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: Программирование STM8
Всем, привет!
Вопрос по расположению функций в ОЗУ.
Использую компилятор cosmic.
Сейчас делаю согласно документации:
1) выделяю секцию в озу
2) обертываю функцию в секцию
3) при загрузке копирую в память
Вопрос как рационально использовать ОЗУ, сохранив при этом безопасность использования функций?
Сейчас не получается расположить разные функции в одной и той же области озу.
Например:
1) выделить секцию
2) загрузить функцию_1
3) после выполнения функции_1, загрузить функцию_1, в ту же секцию
Вопрос по расположению функций в ОЗУ.
Использую компилятор cosmic.
Сейчас делаю согласно документации:
1) выделяю секцию в озу
2) обертываю функцию в секцию
3) при загрузке копирую в память
Вопрос как рационально использовать ОЗУ, сохранив при этом безопасность использования функций?
Сейчас не получается расположить разные функции в одной и той же области озу.
Например:
1) выделить секцию
2) загрузить функцию_1
3) после выполнения функции_1, загрузить функцию_1, в ту же секцию
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
Re: Программирование STM8
Кто-то с Ресонанс и СТМ8 работает? Как там описать прерывания и работать с ними? Если можно фрагменты кода
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: Программирование STM8
Написал немножко касательно расположения кода в ОЗУ
http://ziblog.ru/2011/06/23/stm8-ndash- ... da-iz-ozu/
http://ziblog.ru/2011/06/23/stm8-ndash- ... da-iz-ozu/
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru
Re: Программирование STM8
DrWatson писал(а):любовь к халяве на генетическом уровне заставила искать пилюлю, которая быстрее нашлась для космика
здравствуйте! а не подскажете, где её (рабочую) взять? в своё время накачал даже несколько версий космика, но ни одна из пилюль ни с одной из версий так и не взлетела :(
don't believe what u see,
don't believe what u read
don't believe what u read
- Zheleznjakov
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Сб июн 12, 2010 16:19:17
- Откуда: Россия, Томск
- Контактная информация:
Re: Программирование STM8
Вам не хватает фришной версии с ограничением в 32кБ? по моему более чем достаточно 
С уважением, Денис Железняков aka ZiB
Мой блог: http://ziblog.ru
Мой блог: http://ziblog.ru