Forth http://fforum.winglion.ru/ |
|
Применение Форта для ARM, AVR, MSP430, PIC ... http://fforum.winglion.ru/viewtopic.php?f=39&t=9 |
Страница 7 из 17 |
Автор: | KPG [ Вс фев 21, 2016 16:39 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Ilya писал(а): Меня попёрло и теперь у меня уже 3-и СТМ-ки! ( У меня пока одна плата на STM32L100, хотя есть ещё на STM8, и запускал её только с VFX Forth Ilya писал(а): ЗЫ А попробуй написать письмо главному буржую. Чёй-то он на последнее моё письмо пока не ответил, а ведь собирался выпустить новый релиз в январе. Compileroptimierungen für Forth im Microcontroller Код: ➤Redner: Matthias Koch ➤EventID: 7520 ➤Event: 32. Chaos Communication Congress [32c3] des Chaos Computer Club [CCC] ➤Ort: Congress Centrum Hamburg (CCH); Am Dammtor; Marseiller Straße; 20355 Hamburg; Deutschland ➤Sprache: deutsch ➤Beginn: Mi. 30.12.2015 17:15:00 +01:00 ➤Lizenz: CC-by P.S. Кто нибудь может сделать пересказ о чём речь? Через гугл перевод анотации этого выступления выглядит так Код: Оптимизация компилятора для изложенных в микроконтроллер
Mecrisp внутренне Как константами и Registerallokator для Forth компилятором реализации работающей в микроконтроллер? Те, кто хотел возиться с электроникой и микроконтроллеров, безусловно знает трудоемким поиск неисправностей с большим количеством маленьких тестовых программ. Но это также возможно установить Forth компилятор непосредственно в микроконтроллере, который может быть передано через терминал и который позволяет, "изнутри" для доступа к оборудованию, и сразу же попробовать каждый подпрограмму переписан вручную. Четвертая старая шляпа - но кто теперь думает о медленно, могут быть удивлены: оптимизации Forth компилятор с постоянной складывания и Registerallokator вписывается 20 размера кб даже в LPC1114FN28! Как оптимизаций "на борту" функция будет обсуждаться в этой лекции. Ассемблер знаний для MSP430 и ARM Cortex M являются полезными. Те, кто хочет узнать Forth точным, может бы прийти к Собрания Forth-Gesellschaft. |
Автор: | Ilya [ Вс фев 21, 2016 16:55 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
KPG писал(а): Chu По какой инструкции (шагов) собирается Mecrisp из исходников. P.S. VFX для STM32 от MPE не "мучил"? Тоже достаточно интересный "квест" Так вроде всё достаточно просто: 1. cd .../mecrisp-stellaris-2.1.6/mecrisp-stellaris-source/stm32... 2. make clean & make Правда не знаю как в Форточках, а в Линухе надо ещё установить arm-none-eabi-gcc. |
Автор: | Ilya [ Вс фев 21, 2016 17:08 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
KPG писал(а): Ilya писал(а): Меня попёрло и теперь у меня уже 3-и СТМ-ки! ( У меня пока одна плата на STM32L100, хотя есть ещё на STM8, и запускал её только с VFX Forth ... Compileroptimierungen für Forth im Microcontroller Код: ➤Redner: Matthias Koch ➤EventID: 7520 ➤Event: 32. Chaos Communication Congress [32c3] des Chaos Computer Club [CCC] ➤Ort: Congress Centrum Hamburg (CCH); Am Dammtor; Marseiller Straße; 20355 Hamburg; Deutschland ➤Sprache: deutsch ➤Beginn: Mi. 30.12.2015 17:15:00 +01:00 ➤Lizenz: CC-by ... Точно! Он мне писал, что занимается оптимизацией! Забавный "фашист". И при этом он совсем не прогер: "...I studied physics and agriculture. Now I work in biophysics research in university, doing laser spectroscopy on algae...." |
Автор: | Ilya [ Пн фев 22, 2016 19:51 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
KPG писал(а): У меня пока одна плата на STM32L100, хотя есть ещё на STM8, и запускал её только с VFX Forth А чего там с VFX - эволюшн или какие другие ограничения имеются? |
Автор: | KPG [ Пн фев 22, 2016 19:55 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Ilya писал(а): KPG писал(а): У меня пока одна плата на STM32L100, хотя есть ещё на STM8, и запускал её только с VFX Forth А чего там с VFX - эволюшн или какие другие ограничения имеются? Наверное только эволюшен т.к. всё собирается и наверное и ограничения на эволюшин можно при желании убрать. P.S. Хотя нет, возможно какие то пакеты присутствующие в PC версии не включены |
Автор: | Ilya [ Сб мар 12, 2016 03:42 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
А вот тут http://jeelabs.org/article/1608d/ буржуй ведёт весьма познавательный блог про mecrisp. |
Автор: | chu [ Вт мар 22, 2016 13:56 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Ilya писал(а): А вот тут http://jeelabs.org/article/1608d/ буржуй ведёт весьма познавательный блог про mecrisp. Полезно, да. Таки добрался я до регистра control: Код: : control@ dup [ $F3EF8614 ><, ] ; ok. see control@ 20000378: B500 push { lr } 2000037A: F847 str r6 [ r7 #-4 ]! 2000037C: 6D04 2000037E: F3EF 20000380: 8614 20000382: BD00 pop { pc } ok. control@ ok. w0b.r 00000000 00000000 00000000 00000000 ok. Откуда явно наблюдаю что control[0]=0 ; привилегированный уровень доступа в режиме потока; control[1]=0 ; используется основной стек (MSP). Мелочь, а приятно, победил. зы. дизассемблер так себе, не распознал инструкцию mrs... |
Автор: | Ilya [ Вт мар 22, 2016 22:05 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
chu писал(а): ..... Мелочь, а приятно, победил. зы. дизассемблер так себе, не распознал инструкцию mrs... Почти ничего не понял. Ты тему со словами вида: Код: 0-foldable понял?Чё к чему? |
Автор: | chu [ Ср мар 23, 2016 05:51 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Ilya писал(а): понял? Нет ещё
|
Автор: | kzagradskiy [ Чт мар 24, 2016 19:55 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Ilya писал(а): Ты тему со словами вида: Код: 0-foldable понял?Чё к чему? В репозитории [https://github.com/kevinfish/mecrisp] есть более подробное описание поля флагов и других особенностей реализации: Цитата: ...Here is a map of flag meanings: ; FF Invisible ; ; 00 Visible ; 10 Immediate ; 20 Inline - that means, it's contents will be inlined ; until $4130, the ret opcode is found. ; 30 Immediate+Inline means: Immediate, Compile-Only ; 40 Foldable or ready for opcoding ; 80 Allocates initialized Ram (automatically zero-foldable). ; Low Nibble notes how many cells (16-Bit-Values) are reserved. ; For example flag 82 reserves 4 Bytes. ; Reserved Ram is initialized to the values ; after the ret opcode of the word. ; ; In detail: ; Foldable or opcodeable ; 40 0-foldable, e.g. constants ; 41 1-foldable, e.g. 1+ ; 42 2-foldable, e.g. swap, xor ; . ... ; 47 7-foldable ; ; "48" is base for opcodable ; 49 opcodable two operand calculus or logic, all are ; automatically 2 foldable (often in combination mit inline: $69) ; 4A opcodable write memory ; 4B opcodable read memory ; 4C opcodable special ;... ...Interpret is complicated and performs all optimisations like folding and opcoding. For details you can look in the source, which is heavily documented, but for now only in German... ...If you like to make your definitions foldable, consider this: : 5+ 5 + 1-foldable ; Makes your shortcut foldable, if there is at least one constant number waiting. : 11more 6 5+ + ; With folding activated for 5+, this will internally optimize to : 11more 11 + ; 11 + internally gets opcoded to add #11, @r4... This would be the setting for maximal optimisation: : 5+ 5 + 1-foldable ; : 11more 6 5+ + 1-foldable ; Constants are automatically activated for folding, so if you write: $20 constant P1IN $21 constant P1OUT $22 constant P1DIR $27 constant P1REN %1 constant led_red %10 constant led_green : led-init led_green led_red or P1DIR c! ; it will get folded to : led-init 3 $22 c! ; As c! is opcodable, the opcode for mov.b #3, &022h is written to the dictionary, where it consumes 6 bytes. Normal calls take up 4 Bytes, literals take up a maximum of 8 Bytes (sic!), inlined core words take 2 to 4 bytes. Special constructs like does> need more... В общем, "0-folding" и др. нужны чтобы оптимизатор во время компиляции вычислил результат слова и вместо компиляции XT слова подставил его готовый результат в вычисления. |
Автор: | chu [ Чт мар 24, 2016 21:22 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
kzagradskiy писал(а): О! Спасибо. |
Автор: | chu [ Чт мар 24, 2016 21:43 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
В Mecrisp-Stellaris не реализованы атомарные битовые операции. А зря. Matthias Koch писал(а): Fetch-Modify-Store operations like +! or bic! are not atomic. Joseph Yiu ТНЕ DEFINITIVE GUIDE ТО ТНЕ ARM CORTEX-M3 писал(а): 5.5. Операции побитовоrо доступа Поддержка метода побитовоrо доступа bitband позволяет использовать обыч- ные операции заrрузки/сохранения для обращения (чтение/запись) к отдельным битам данных. В процессоре CortexM3 побитовый доступ к памяти поддержива- ется только для двух предопределённых областей памяти, называемых областя- ми хранения битов. Одна из этих областей расположена в IM меrабайте aдpeсного пространства СО3У, а друrая в 1 м меrабайте адресноrо пространства пери- ферийных устройств. В принципе, эти области можно использовать как обычную память, однако к ним можно обращаться и посредством специальной области па- мяти, называемой областью доступа к битам (Рис. 5.3). При использовании aдpe- са, расположенноrо в области доступа к битам, младший бит адресуемоrо значе- ния обращается к отдельному биту области хранения битов. ... 5.5.1. Преимущества использования метода bit-band ... Помимо тoгo, что метод bitband ускоряет выполнение битовых операций, по- зволяя обойтись меньшим числом команд, он также иrрает важную роль при op- rанизации совмecтнoгo использования какихлибо ресурсов несколькими про- цессами. Одним из важнейших достоинств битовых операций с применением мe- тода bitband является их атомарность. Друrими словами, выполнение последова- тельности «чтение-модификация-запись» не может быть прервано никакими друrими операциями на шине. ... Определение адреса в области доступа к битам Код: \ get bit-band address : bitband ( bit addr1 -- addr2 ) dup $fff00000 and $02000000 or swap $000fffff and $20 * + swap $4 * + ; позаимствовал у осо. Так как мой вариант ( с проверками допустимого диапазона адресов ) получился слишком неуклюжим. Поначалу написал такие определения Код: : bit+ ( addr --- ) 1 swap c! ; : bit- ( addr --- ) 0 swap c! ; : bit? ( addr --- 1|0 ) c@ ; Результат Код: see bit+ 000069C4: B500 push { lr } 000069C6: F847 str r6 [ r7 #-4 ]! 000069C8: 6D04 000069CA: 2601 movs r6 #1 000069CC: 6839 ldr r1 [ r7 #0 ] 000069CE: 603E str r6 [ r7 #0 ] 000069D0: 000E lsls r6 r1 #0 000069D2: CF03 ldmia r7 { r0 r1 } 000069D4: 7030 strb r0 [ r6 #0 ] 000069D6: 000E lsls r6 r1 #0 000069D8: BD00 pop { pc } ok. see bit- 000069E8: B500 push { lr } 000069EA: F847 str r6 [ r7 #-4 ]! 000069EC: 6D04 000069EE: 2600 movs r6 #0 000069F0: 6839 ldr r1 [ r7 #0 ] 000069F2: 603E str r6 [ r7 #0 ] 000069F4: 000E lsls r6 r1 #0 000069F6: CF03 ldmia r7 { r0 r1 } 000069F8: 7030 strb r0 [ r6 #0 ] 000069FA: 000E lsls r6 r1 #0 000069FC: BD00 pop { pc } ok. мне категорически не понравился. Особенно в сравнении с родным (не атомарным!) определением bis! ( mask a-addr -- ) \ Set BIts in word-location Код: see bis! 00000D02: CF03 ldmia r7 { r0 r1 } 00000D04: 6832 ldr r2 [ r6 #0 ] 00000D06: 4302 orrs r2 r0 00000D08: 6032 str r2 [ r6 #0 ] 00000D0A: 000E lsls r6 r1 #0 00000D0C: 4770 bx lr ok. В системе Mecrisp-Stellaris возможно компилировать код инструкции процессора прямо в определение слова. После вдумчивого курения ARM Architecture Reference Manual Thumb-2 Supplemen (ARM DDI 0308D) написалось Код: : bit? ( bbaddr --- 1|0 ) [ $7836 h, ] ; : bit+ ( bbaddr --- ) [ $70312101 , ] drop ; : bit- ( bbaddr --- ) [ $70312100 , ] drop ; see bit? 000043AC: B500 push { lr } 000043AE: 7836 ldrb r6 [ r6 #0 ] 000043B0: BD00 pop { pc } ok. see bit+ 000043C0: B500 push { lr } 000043C2: 2101 movs r1 #1 000043C4: 7031 strb r1 [ r6 #0 ] 000043C6: CF40 ldmia r7 { r6 } 000043C8: BD00 pop { pc } ok. see bit- 000043D8: B500 push { lr } 000043DA: 2100 movs r1 #0 000043DC: 7031 strb r1 [ r6 #0 ] 000043DE: CF40 ldmia r7 { r6 } 000043E0: BD00 pop { pc } ok. Совсем другое дело! Так значительно лучше. Выделю ячейку памяти под флаги: Код: 0 variable bbv ok. bbv @ w0b.r 00000000 00000000 00000000 00000000 ok. битовые флаги: Код: decimal ok. 31 bbv bitband constant bbv31 ok. 17 bbv bitband сonstant bbv17 ok. 15 bbv bitband constant bbv15 ok. 0 bbv bitband constant bbv0 ok. 2 bbv bitband constant bbv2 ok. 5 bbv bitband constant bbv5 ok. тест: Код: bbv5 bit+ bbv @ w0b.r 00000000 00000000 00000000 00100000 ok. bbv31 bit+ bbv5 bit- bbv @ w0b.r 10000000 00000000 00000000 00000000 ok. bbv17 bit+ ok. bbv15 bit? . 0 ok. bbv17 bit? . 1 ok. bbv2 bit? . 0 ok. bbv @ w0b.r 10000000 00000010 00000000 00000000 ok. bbv17 bit- bbv31 bit- bbv2 bit+ bbv @ cr w0b.r 00000000 00000000 00000000 00000100 ok. ногодрыжество с битами порта: Код: \ \ 4 RCC_APB2ENR bitband constant IOPCEN \ Bit 4 IOPCEN: I/O port C clock enable 8 GPIOC _ODR bitband constant led-blue \ Blue LED on PC8 9 GPIOC _ODR bitband constant led-green \ Green LED on PC9 \ \ : leds_init IOPCEN bit? 0= if IOPCEN bit+ then \ I/O port C clock enable $22 GPIOC _CRH ! \ Set LEDs as push-pull outputs, max speed 2 MHz. ; : colours ( -- ) begin key dup case [char] g of led-green dup bit? if bit- else bit+ then endof [char] b of led-blue dup bit? if bit- else bit+ then endof endcase 27 = until ; моргают... |
Автор: | Ilya [ Чт мар 24, 2016 22:02 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
chu писал(а): kzagradskiy писал(а): О! Спасибо. Присоединяюсь! |
Автор: | chu [ Чт мар 31, 2016 15:27 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
ekoeppen писал(а):
|
Автор: | chu [ Вт апр 05, 2016 07:58 ] |
Заголовок сообщения: | Re: Применение Форта для ARM, AVR, MSP430, PIC ... |
Илья, ты же свою машинку от PLL разогнал? Покажи, плз, как считаешь значение для Baud rate register (USART_BRR). Чего то я туплю не могу определиться с битовым полем DIV_Fraction[3:0] Урра! Сам победил. |
Страница 7 из 17 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |