Forth http://fforum.winglion.ru/ |
|
Forth для ARM'а http://fforum.winglion.ru/viewtopic.php?f=39&t=2110 |
Страница 1 из 3 |
Автор: | iv_ru [ Чт май 14, 2009 10:33 ] |
Заголовок сообщения: | Forth для ARM'а |
Всем доброго времени суток! Первый пост и сразу вопрос! Есть у меня такой Борд: http://olimex.com/dev/images/ARM/ATMEL/SAM7-P256-1.jpg Есть к нему(микроконтроллеру) hForth: http://www.arcus-eds.de/index.php?id=24 ... rm_IAR.tgz И собственно вопросы: 1. как мне его на микроконтроллер "залить"? 2. он вообще интерактивный? В смысле команды они будут исполняться непостедственно на АТ91САМ7С64 или на терминале компилироваться а на борд будет залит "бинарник"? Это есть очень важный критерий, так как в основном на этом Борде надо будет демонстрировать принципиальную тестируемость електронных плат в силовой электронике (это тема дипломной у меня такая) --- всем заранее огромное спасибо за Ваше время потраченное на прочтение и возможно на написание ответов/советов. |
Автор: | Kopa [ Чт май 14, 2009 11:57 ] |
Заголовок сообщения: | |
iv_ru писал(а): И собственно вопросы: 1. как мне его на микроконтроллер "залить"? a. т.к. в данном проекте использовался IAR, то можно заливать через JTAG от IAR b. в папке Flash_debug\exe лежит скомпилированная debug версия бинарного файла *.d79 ( возможно заливку осуществить через JTAG GDB сервиса из утилит GCC компилятора, но там, скорее всего *.d79 не прокатит и понадобится перекомпилировать проект с выходом elf файла или перенести данный проект под GCC компилятор) если программа PROTEUS поддерживает симуляцию данного контроллера, то под ней можно посмотреть работу программы. iv_ru писал(а): 2. он вообще интерактивный? В смысле команды они будут исполняться непостедственно на АТ91САМ7С64 или на терминале компилироваться а на борд будет залит "бинарник"? Это есть очень важный критерий, так как в основном на этом Борде надо будет демонстрировать принципиальную тестируемость електронных плат в силовой электронике (это тема дипломной у меня такая) Если не смотреть исходники, то необходимо прочитать авторскую документацию. В проекте, как минимум, должен быть поддержан какой из нибудь интерфейсов RS232, I2C, SPI, USB, для общения с внешним окружением и уровень обмена командами или заливки программы в его Flash или ОЗУ. В обычной Форт системе терминальный канал в устройстве обычно всегда делается:) ( иначе возникают сильные ограничения в таком Форте ) P.S. C ARM почти не соприкасался, и использовал JTAG из IAR:) Там еще есть версия с подключенной периферией http://www.arcus-eds.de/index.php?id=24 ... V_2_03.tgz ( elf файл тоже есть в данной версии есть и driver\ ) После прошивки должно плучиться подклчение через любую терминальную программу ( см. readme_org.* файлы ) По необходимости, скорее всего, придётся использовать Си библиотеки для интеграции в проект использования Форта:) \ В разработке пользовательского дизайна приборов у arcus \ используется Форт язык http://www.arcus-eds.de/arcsuite.html?&L= \ и есть поддержка на внутреннем форуме http://www.arcus-eds.de/forum.html Это пока первые комментарии - кто-нибудь может более содержательней объяснит. Успехов ! |
Автор: | Mihail [ Чт май 14, 2009 13:10 ] |
Заголовок сообщения: | |
Кое-чего у меня рациональнее Код: #define TREG R1 #define TOS R2 #define W R9 #define UP R10 #define IP R11 #define DSTK R12 #define RSTK R13 CODE > swp TOS,TOS,[DSTK] CODL < dpop r1 subs TOS,r1,TOS @ TOS = a-b -- msbit set if a is less than b CODL 0< mov TOS,TOS,asr #31 @ turn msbit into 0xffff or 0x0000 NEXT ASMARM_END CODE U> swp TOS,TOS,[DSTK] CODL U< dpop r1 subs TOS,r1,TOS @ TOS = a-b -- carry set if a is less than b sbc TOS,TOS,TOS NEXT ASMARM_END CODE = ( a b - f) dpop R1 eor TOS, R1 TOS CODL 0= subs TOS, TOS, #1 sbc TOS, TOS, TOS NEXT ASMARM_END CODE UM/MOD ( ud un -- urem uqtn ) \ Unsigned divide of a double by a single. \ Return mod and quotient LDR R4,[DSTK], #4 LDR R3,[DSTK,#0] MOV R1,#0x20 LL1: MOVS R3,R3,LSL #1 MOV R4,R4,LSL #1 ADC R4,R4,#0x0 CMP R4,TOS BLO LL0 SUB R4,R4,TOS ADD R3,R3,#0x1 LL0: SUBS R1,R1,#0x1 BNE LL1 STR R4,[DSTK,#0] MOV TOS,R3 NEXT ASMARM_END CODE ABS ( n1 n2 -- n3 ) CMP TOS, #0 rsblt TOS,TOS,#0 NEXT ASMARM_END CODE PICK ( xu ... x1 x0 u -- xu ... x1 x0 xu ) \ 94 CORE EXT ADD TOS,DSTK,TOS, lsl #2 ldr TOS, [TOS] NEXT ASMARM_END CODE 2! ( c a -) LDMIA DSTK!,{R0,R1} STMIA TOS,{R0,R1} ldr TOS, [DSTK], #4 \ drop NEXT ASMARM_END CODE 2@ ( a - n) LDMIA TOS,{R2,R3} dpush r3 NEXT ASMARM_END CODE 2DROP ldmia DSTK!, {r1, r2} NEXT ASMARM_END CODE 2DUP ( a b - a b a b) ldr r1, [DSTK] stmdb DSTK!, {r1, r2} NEXT ASMARM_END CODE 2SWAP ( a b c d - c d a b) ldmia DSTK!, {r3-r5} @ r3=a, r2=b, r1=c, r0=d stmdb DSTK!, {r2,r3} @ push c, push d dpush r5 @ push a mov TOS, r4 @ put b into TOS NEXT ASMARM_END CODE ROT ( a b c - b c a) ldmia DSTK!, {r3, r4} ; copy a to r2, copy b to r1, tos has c stmdb DSTK!, {r2, r3} // copy b and c back to physical stack mov TOS, r4 @ copy a to TOS NEXT ASMARM_END CODE -ROT ( a b c - c a b) MOV R4,TOS ; copy TOS to r2 ldmia DSTK!, {r2,r3} ; copy a to r1, copy b to TOS, tos has c stmdb DSTK!, {r3,r4} // copy a and c back to physical stack NEXT ASMARM_END |
Автор: | Hishnik [ Чт май 14, 2009 14:07 ] |
Заголовок сообщения: | |
Mihail писал(а): Кое-чего у меня рациональнее
Ну хоть перед студентами-то можно распальцовку выключать? |
Автор: | iv_ru [ Чт июн 18, 2009 12:58 ] |
Заголовок сообщения: | |
Всем доброго дня! Вопрос номер 2: -Окружение: Windows XP, HyperTerminal... -есть скрипт: prog1.f Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15" Всем заранее спасибо! И кстати спасибо за ответы на предыдущий вопрос, особенно Михаилу |
Автор: | Kopa [ Чт июн 18, 2009 14:00 ] |
Заголовок сообщения: | |
iv_ru писал(а): Всем доброго дня!
Вопрос номер 2: -Окружение: Windows XP, HyperTerminal... -есть скрипт: prog1.f Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15" Через терминал Форт команды уже понимает? Если да, то возможно при передаче prog1.f по терминальному каналу может понадобится вначале строк Форта или между словами вставить пробелы для того, чтобы данные успел обработать ARM. ( если теряются байты по каналу можно поставить прогу слежения за передаваемыми данными по каналу терминала ) P.S. Ошибка ??-13 55 приходит по каналу? Возможно это непонимание слова расположенное в строке с номером 13 позиции 55 скрипта prog1.f |
Автор: | iv_ru [ Чт июн 18, 2009 14:22 ] |
Заголовок сообщения: | |
Kopa писал(а): iv_ru писал(а): Всем доброго дня! Вопрос номер 2: -Окружение: Windows XP, HyperTerminal... -есть скрипт: prog1.f Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15" Через терминал Форт команды уже понимает? Если да, то возможно при передаче prog1.f по терминальному каналу может понадобится вначале строк Форта или между словами вставить пробелы для того, чтобы данные успел обработать ARM. ( если теряются байты по каналу можно поставить прогу слежения за передаваемыми данными по каналу терминала ) P.S. Ошибка ??-13 55 приходит по каналу? Возможно это непонимание слова расположенное в строке с номером 13 позиции 55 скрипта prog1.f Программа слежения за трансфером данных по каналу (0-Модем?), я так думаю, есть самое лучшее решение.... А что за программа? |
Автор: | iv_ru [ Чт июн 18, 2009 16:17 ] |
Заголовок сообщения: | |
пока не раозобрался с заливкой скриптов... дома под линуксом попробую (есть один проект на питоне)... Может кто подскажет как встроить паузу в исполняемый код? Что-бы программа в каждом цикле секундочку ждала, перед тем как дальше работать. А то как-то плохо интеджер туда-сюда считать... |
Автор: | Kopa [ Чт июн 18, 2009 16:27 ] |
Заголовок сообщения: | |
iv_ru писал(а): Программа слежения за трансфером данных по каналу (0-Модем?), я так думаю, есть самое лучшее решение.... А что за программа?
Они разные есть. ( одна из них LG ComSpy ) P.S. Может есть слово ms ( или что то подобное), можно пустой цикл организовать или прерывать програмку по KEY? . |
Автор: | iv_ru [ Пт июн 19, 2009 12:46 ] |
Заголовок сообщения: | |
написал следующие пауза-слово: Код: : wait hex begin 1ms swap 1- dup 0 = -rot swap until drop drop ; ... и получил бесконечный цикл... Код: > LEDON 1 wait LEDOFF В чём проблема?
|
Автор: | iv_ru [ Пт июн 19, 2009 12:49 ] |
Заголовок сообщения: | |
Код: : wait begin 1 ms swap 1- dup 0 = -rot swap rot until drop drop ; так правильно, проблема таже... Программа LEDOFF невызывается и промт я не получаю...
|
Автор: | Гость [ Пт июн 19, 2009 13:30 ] |
Заголовок сообщения: | |
iv_ru писал(а): Код: : wait begin 1 ms swap 1- dup 0 = -rot swap rot until drop drop ; так правильно, проблема таже... Программа LEDOFF невызывается и промт я не получаю...Жуть код! Код: : wait ( n -- ) \ если n например в секундах и n > 0 \ максимальное n зависит от разрядности cell 1000 * begin 1 ms 1- dup 0= until drop ; : wait ( n -- ) 1000 * ms ; \ или LEDON 1000 ms LEDOFF P.S. Время будет примерное т.к не учитываются длительности перераторов |
Автор: | iv_ru [ Пт июн 19, 2009 16:19 ] |
Заголовок сообщения: | |
Anonymous писал(а): Opps. Код: : wait ( n -- ) \ если n например в секундах и n > 0 \ максимальное n зависит от разрядности cell 1000 * begin 1 ms 1- dup 0= until drop ; спасибо огромное, я понимал. что "код жуть" но лучше за это время не мог сделать... вот по вашим следам написал слово чтоб 10 раз ЛЕД-шки мигнули... до сих пор мигают что я опять не так сделал? Код: : blink * begin ledon 1 wait ledoff 1 wait 1- dup 0= until drop ;
10 blink [CR] |
Автор: | WingLion [ Пт июн 19, 2009 17:22 ] |
Заголовок сообщения: | |
iv_ru писал(а): Код:
: blink * begin ledon 1 wait ledoff 1 wait 1- dup 0= until drop ; 10 blink [CR] первой звездочкой в определении 10 умножилось непонятно на что (любой мусор, оставшийся на стеке) вот оно и моргает десятикратно "мусор знает сколько раз". |
Автор: | iv_ru [ Пт июн 19, 2009 17:52 ] |
Заголовок сообщения: | |
Anonymous писал(а): Opps. Код: : wait ( n -- ) \ если n например в секундах и n > 0 \ максимальное n зависит от разрядности cell 1000 * begin 1 ms 1- dup 0= until drop ; Код: : wait ( n -- ) \ take 'n' from stack and wait 'n' seconds
1000 * ( n 250 -- k) \ k = n * 1000 begin ( -- ) 1ms ( -- ) 1- ( k -- k' ) \ k' = k - 1 dup ( k' -- k' k' ) 0= ( k' k' -- k' flag) \ flag ( C/C++: 0 == k' ? true : false; ) until ( k' flag -- k' ) drop ( k''' -- ) \ last k: k = 0 will be dropped from stack ; всё правильно? Я так и не понял откуда until знает где стоит begin? могу только представить, что существует Адрес-Стек куда begin кладёт свой адрес а until его читает... Это так или нет? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |