Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 13:14

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Forth для ARM'а
СообщениеДобавлено: Чт май 14, 2009 10:33 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Всем доброго времени суток!

Первый пост и сразу вопрос! Есть у меня такой Борд: 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 или на терминале компилироваться а на борд будет залит "бинарник"? Это есть очень важный критерий, так как в основном на этом Борде надо будет демонстрировать принципиальную тестируемость електронных плат в силовой электронике (это тема дипломной у меня такая)


---
всем заранее огромное спасибо за Ваше время потраченное на прочтение и возможно на написание ответов/советов. :roll:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт май 14, 2009 11:57 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
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

Это пока первые комментарии - кто-нибудь может более содержательней объяснит.

Успехов !


Последний раз редактировалось Kopa Чт май 14, 2009 16:18, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт май 14, 2009 13:10 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Кое-чего у меня рациональнее

Код:

#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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт май 14, 2009 14:07 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Mihail писал(а):
Кое-чего у меня рациональнее

:dmad;
Ну хоть перед студентами-то можно распальцовку выключать?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 18, 2009 12:58 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Всем доброго дня!
Вопрос номер 2:
-Окружение: Windows XP, HyperTerminal...
-есть скрипт: prog1.f

Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15"

Всем заранее спасибо!
И кстати спасибо за ответы на предыдущий вопрос, особенно Михаилу :-)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 18, 2009 14:00 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
iv_ru писал(а):
Всем доброго дня!
Вопрос номер 2:
-Окружение: Windows XP, HyperTerminal...
-есть скрипт: prog1.f
Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15"


Через терминал Форт команды уже понимает?
Если да, то возможно при передаче prog1.f по терминальному каналу может понадобится
вначале строк Форта или между словами вставить пробелы для того, чтобы данные успел обработать ARM. ( если теряются байты по каналу можно поставить прогу слежения
за передаваемыми данными по каналу терминала )

P.S. Ошибка ??-13 55 приходит по каналу? Возможно это непонимание слова расположенное
в строке с номером 13 позиции 55 скрипта prog1.f


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 18, 2009 14:22 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Kopa писал(а):
iv_ru писал(а):
Всем доброго дня!
Вопрос номер 2:
-Окружение: Windows XP, HyperTerminal...
-есть скрипт: prog1.f
Как мне её запихнуть в словарь? И что означает очень информативное сообщение об ошибке "?? -13 15"


Через терминал Форт команды уже понимает?
Если да, то возможно при передаче prog1.f по терминальному каналу может понадобится
вначале строк Форта или между словами вставить пробелы для того, чтобы данные успел обработать ARM. ( если теряются байты по каналу можно поставить прогу слежения
за передаваемыми данными по каналу терминала )

P.S. Ошибка ??-13 55 приходит по каналу? Возможно это непонимание слова расположенное
в строке с номером 13 позиции 55 скрипта prog1.f


Программа слежения за трансфером данных по каналу (0-Модем?), я так думаю, есть самое лучшее решение.... А что за программа?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 18, 2009 16:17 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
пока не раозобрался с заливкой скриптов... дома под линуксом попробую (есть один проект на питоне)...

Может кто подскажет как встроить паузу в исполняемый код? Что-бы программа в каждом цикле секундочку ждала, перед тем как дальше работать. А то как-то плохо интеджер туда-сюда считать...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 18, 2009 16:27 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
iv_ru писал(а):
Программа слежения за трансфером данных по каналу (0-Модем?), я так думаю, есть самое лучшее решение.... А что за программа?


Они разные есть. ( одна из них LG ComSpy )

P.S. Может есть слово ms ( или что то подобное), можно пустой цикл организовать
или прерывать програмку по KEY? .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 19, 2009 12:46 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
написал следующие пауза-слово:

Код:
: wait hex  begin 1ms swap 1- dup 0 = -rot swap until drop drop ;


... и получил бесконечный цикл...
Код:
> LEDON 1 wait LEDOFF
В чём проблема?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 19, 2009 12:49 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код:
: 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. Время будет примерное т.к не учитываются длительности перераторов


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 19, 2009 16:19 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 19, 2009 17:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
iv_ru писал(а):
Код:
: blink * begin ledon 1 wait ledoff 1 wait 1- dup 0= until drop ;
10 blink [CR]


первой звездочкой в определении 10 умножилось непонятно на что (любой мусор, оставшийся на стеке) вот оно и моргает десятикратно "мусор знает сколько раз".

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июн 19, 2009 17:52 
Не в сети

Зарегистрирован: Ср май 13, 2009 18:35
Сообщения: 35
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
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 его читает... Это так или нет?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 31 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB