Страница 9 из 130
Re: Программирование STM8
Добавлено: Сб май 14, 2011 18:32:37
Zheleznjakov
а ни кто не знает по чем космик для предприятий?
Re: Программирование STM8
Добавлено: Сб май 14, 2011 18:45:08
DrWatson
Судя по тому, что у Raisonance профессиональная версия Ride7 стоит 990 евро, думаю у космика цена не сильно отличается.
Re: Программирование STM8
Добавлено: Сб май 14, 2011 20:02:31
avreal
DrWatson писал(а):Использование ИЛИ вместо сложения как минимум уберет условный переход и формирование переноса. Вообще в данном случае использование сложения незачем.
Да это понятно, я с "или" и начинал, просто уже всё подряд пробовал и последнее в форум и процитировал. С "или" у него даже хуже вышло, тоже с rlwa/rrwa (и ведь знает, гад, эти команды, почему не использовал их так, как я после двух дней чтения доки на STM8 смог?).
Вариант с разбивкой на байты и занесением через указатель... В принципе, можно слепить такой макрос LOAD_SFRW(var,sfraddr) и им пользоваться. Но там дальше с этой локальной переменной дальше вычисления идут, принудительно кидать её в память означает вязать руки оптимизатору. Хотя такому оптимизатору... Да и не люблю я такие привяки с тех пор, когда пришлось для AVOCET C51 15+ лет назад лепить
Код: Выделить всё
#define EQU(a,b) (((a)^(b))==0)
if (EQU(a,b)) {...}
потому что на
if (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);
Во всех вариантах компилирутся в жуть с загрузкой
PB_ODR в аккумулятор и разные вычисления вместо банального
BCPL. Мало того, что длинно и долго, так ещё и неатомарно
Космики с резонансами выглядят лучше.
IAR, конечно, допилят со временем, но...
Re: Программирование STM8
Добавлено: Сб май 14, 2011 20:14:21
avreal
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) резко удлинняется...
Re: Программирование STM8
Добавлено: Сб май 14, 2011 20:17:39
avreal
С виртуальными регистрами -- похоже, они решил так себе упростить жизнь, у AVR/MCS51/ARM/... регистров валом и середина компилятора может быть просто рассчитана на их наличие.
Если так, а не какая-то умная задумка, которую я ещё не понял и не вижу от неё выиграша, то ждать улучшений не приходится, модель работы компилятора -- не оптимизатор, меняться не будет.
Да, кстати, показали космик, а резонанса нету?
Re: Программирование STM8
Добавлено: Сб май 14, 2011 21:16:52
DrWatson
А может у IAR есть какая-то настройка, чтобы локальные переменные на стек кидались?
Raisonance скачал, но не ставил, поскольку любовь к халяве на генетическом уровне заставила искать пилюлю, которая быстрее нашлась для космика. (Может и не понадобится, но "шоб було"))
ЗЫ: А что мешает на другом компиляторе писать? (Хотя, если деньги "уплочены", то придется, иначе можно и триал от резонанса использовать, если кода не больше 32к).
Re: Программирование STM8
Добавлено: Сб май 14, 2011 21:29:15
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;
Блин надо это запомнить или куда-то записать )))
Re: Программирование STM8
Добавлено: Сб май 14, 2011 21:36:47
avreal
DrWatson писал(а):А может у IAR есть какая-то настройка, чтобы локальные переменные на стек кидались?
Меняется только количество виртуальных регистров -- 12 или 16 байт.
Исходя из того, что размер секции .vregs по map-е от этой настройки не зависит, я подозреваю, что у библиотеки на этот счёт может быть своё мнение (кстати, при «просьбе кинуть на стек» и библиотеки подменять нужно было бы).
По поводу IAR -- да никаких проблем, просто человек, попросивший меня «спортить» scmRTOS, просил IAR.
Но без фанатизьмы, эта тема уже заставила задуматься
Мне так вообще всё равно, я в ближайшее время stm8 не собираюсь нигде ставить. Разве что
DrWatson писал(а):можно и триал от резонанса использовать, если кода не больше 32к.
Юридический и технический вопросы.
Юр: как там с триалом -- в серию можно на нём делать?
Техн: оно только под win ?
Исключительно из соображений «чтобы не даром толочься вокруг stm8» мне сейчас есть куда поставить STM8L151 (нужны 12 бит АЦП и ЦАП), кода там врядли больше 8К будет. Но туда с тем же успехом и ~в те же деньги станет STM32F100.
Компилироваться будет тем же gcc и зашиваться той же FT2232 и под той же убунтой, что и для STM32F103, который в том же изделии будет стоять. Да, у него и АЦП и ЦАП будут, но там удобнее и логичнее часть работы вынести на другую плату со своим микроконтроллером.
Так что для оправдания возни с STM8 можно туда его поставить, но только если это не потребует большого дополнительного геморроя.
Re: Программирование STM8
Добавлено: Сб май 14, 2011 21:46:07
DrWatson
С триалом коммерческие проекты, думаю вряд-ли. Насколько я понимаю он чисто для ознакомления, изучения.
Экономически и тд целесообразнее ИМХО делать весь проект на кортексах - одна среда, один программатор и т.п.
На счет Ride7 и COSMIC под линукс не помню (не задавался этим вопросом), на их сайтах я думаю эта информация должна быть.
Re: Программирование STM8
Добавлено: Вс май 15, 2011 04:32:36
Zheleznjakov
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))
Re: Программирование STM8
Добавлено: Пн май 16, 2011 03:21:45
avreal
DrWatson писал(а):Экономически и тд целесообразнее ИМХО делать весь проект на кортексах - одна среда, один программатор и т.п.
В том-то и дело.
Хотя «одна среда» (GCC + C::B или эклипса, наконец-то) и «один программатор» (FT2232) возможны и для связки Cortex-M3 + AVR

Re: Программирование STM8
Добавлено: Пн май 16, 2011 03:30:45
avreal
avreal писал(а):Из-за этого на входе в обработчик прерываний стоит горсть push тих байтов вместо
SUB SP, #сколько_надо_для_локальных_обработчика ...
Из-за этого контекст вырос, переключение задач (речь идёт о порте scmRTOS под STM8) резко удлинняется...
Не так всё страшно (контекст всё равно переключается ощутимо быстрее, чем для AVR при той же тактовой) и не так всё просто.
У STM8 не нашлось адресации, косвенной по ячейке со смещением к стеку. Т.е. чего-то такого [(offset,SP)].
А вот по ячейке памяти косвенно [shortmem.w] и косвенно-индексно ([shortmem,w],X) обращаться можно. Виртуальные регистры дают кучку указателей c достаточно компактным и быстрым обращением без дёрганья туда-сюда X/Y.
Так что после допиливания оптимизатора должно быть нормально. Только вот когда?
Re: Программирование STM8
Добавлено: Вт май 17, 2011 22:37:15
avreal
Ну вот первая прикидка scmRTOS
STM8/IAR
Сделано сразу под scmRTOS v4.00, но пока:
- переключатель контекстов только прямым вызовом
- нет возможности задать отдельный стек для прерываний
Модели памяти кода работают все.
Модель памяти данных LARGE очень уж неэффективна (код примера 1-EventFlag распухает с ~1850 байт до ~3050), так что не вижу причин и заморачиваться с ней.
Примеры 1-EventFlag (в объёме
этой статьи, чтобы легче сравнивать с AVR) и 4-Debug (пример использования новых возможностей ОС v4.00) рабочие. Только при максимальной оптимизации на скорость 4-Debug показывает цену на дрова, а не % времени. При максимальной-сбалансированной, максимальной-на-размер, средней -- всё нормально.
Глюк мой или компилятора -- ещё не разбирался.
p.s. Оно «в процессе», я уже сократил на несколько байт и тактов

переключатель контекста, где-то что-то по мелочам подправил... Но всё то мелочи и архив на сайте пока не менял. Что-то существнное будет, тогда уже дополню.
Re: Программирование STM8
Добавлено: Ср май 18, 2011 00:19:24
qwerky
DrWatson писал(а):На счет Ride7 и COSMIC под линукс не помню
нет пока ничего
Re: Программирование STM8
Добавлено: Пт май 27, 2011 09:35:20
avreal
DrWatson писал(а):А что мешает на другом компиляторе писать?
Хех... Ну вот нашлось опять немного времени для темы «scmRTOS для STM8»...
Глянул ближе на COSMIC, а он без плюсов. Я среди всех этих gcc/IAR/Keil уже как-от отвык от такого

На С-шный их компилятор для общего развития посмотрю, конечно. Но «космического порта scmRTOS» не будет.
Хочу gcc/stm8

Re: Программирование STM8
Добавлено: Пт июн 03, 2011 06:31:30
Zheleznjakov
Всем, привет!
Вопрос по расположению функций в ОЗУ.
Использую компилятор cosmic.
Сейчас делаю согласно документации:
1) выделяю секцию в озу
2) обертываю функцию в секцию
3) при загрузке копирую в память
Вопрос как рационально использовать ОЗУ, сохранив при этом безопасность использования функций?
Сейчас не получается расположить разные функции в одной и той же области озу.
Например:
1) выделить секцию
2) загрузить функцию_1
3) после выполнения функции_1, загрузить функцию_1, в ту же секцию
Re: Программирование STM8
Добавлено: Ср июн 22, 2011 21:59:00
Shavire
Кто-то с Ресонанс и СТМ8 работает? Как там описать прерывания и работать с ними? Если можно фрагменты кода
Re: Программирование STM8
Добавлено: Чт июн 23, 2011 17:25:26
Zheleznjakov
Re: Программирование STM8
Добавлено: Вс июл 17, 2011 19:53:33
berrymorr
DrWatson писал(а):любовь к халяве на генетическом уровне заставила искать пилюлю, которая быстрее нашлась для космика
здравствуйте! а не подскажете, где её (рабочую) взять? в своё время накачал даже несколько версий космика, но ни одна из пилюль ни с одной из версий так и не взлетела :(
Re: Программирование STM8
Добавлено: Пн июл 18, 2011 04:06:21
Zheleznjakov
Вам не хватает фришной версии с ограничением в 32кБ? по моему более чем достаточно
