Форт-система

Готовая электроника для самодельного робота. Уровень от начинающих до опытных конструкторов.

Re: Форт-система

Сообщение VoidVolker » 27 авг 2012, 18:04

elmot писал(а):Вопрос - насколько сложно встроить Forth машину

Очень просто.
elmot писал(а):Где ее исходники на C?

Например здесь.
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc
Аватара пользователя
VoidVolker
 
Сообщения: 27
Зарегистрирован: 08 авг 2008, 18:47
Откуда: Подмосковье
прог. языки: Форт

Re: Форт-система

Сообщение concat » 20 сен 2012, 21:28

chu писал(а):а ведь я предлагался (фрилансером) в эту контору с предложением сотрудничества ( тем более у них на сайтике пригласительная объява есть)
предлагал им свои услуги по:
- сборка прошивок amforth'а для различных мег по ихней номенклатуре;
- написание либ (драйверов) для всех ихних "шильдов";
- техподдержка по amforth'у;
- etc.
вышел какой-то тип, даже не представился ( видима менеджер, ага), минут через десять моих пояснений у него произошло переполнение буфера, в глазах появилась глубина(пустота) ( ну точно - менеджер, нифига не технарь. программисты , те хоть иногда говорят: "форт? нахер он кому нужен, фортран этот!") так и расстались... недельки через три я позвонил - хотя бы внятное "нет" услышать - результат тот же самый: "му-хрю". пнятно, недосуг ему, занимается развитием бизнеса и продвижением рынка, не иначе, ну и ладно...


Сочувствую, chu. Слишком уж нишевая штука Forth. За последние годы только одну вакансию для фортера встречал.
Спасибо за интересную серию постов по применению форта в мк. Приятно видеть, что хотя бы некоторые хотят что-либо отличное от сишки/асма для мк.
chu, обязательно дайте знать, когда вам удастся протолкнуть свои услуги в коммерческое программирование. Было бы отрадно услышать :).

P.S.: Не в целях рекламы, а просто как деловое предложение - если нужен будет человек на околофортовую работу, я к вашим услугам. Не скажу, что прям уж профи, но определенный интерес к данной тематике имею :pardon:. Кейворды: Forth, REBOL, DSL.
concat
 
Сообщения: 1
Зарегистрирован: 20 сен 2012, 21:03

Re: Форт-система

Сообщение ilya73 » 29 сен 2012, 23:10

А в целях "рекламы" Форт-а, нет желания потрудится "на халяву"!? :D
Например: нужен soft-uart для атмеги (для не коммерческого проекта).
Вот пока воюю ~ таким кодом:
Код: Выделить всё

marker =suart=
2 constant INT0rising
1 constant INT0enabled

variable bit-count
variable byte-count
variable inp-byte
variable vx
variable vx1
variable vx0
variable _finish

create inp-buf 20 allot

\ Запускаем таймер
: +timer
$2 TIMSK1 c!   \ Прерывание по равенству знач. OCR1A
;
\ stops the timer
: -timer
0 TIMSK1 c!
;

: +int-bs INT0enabled EIMSK c! ;
: -int-bs 0 EIMSK c! ;

: timer-int-isr
\ [ 10 us/ ] literal ?delay

bit-count @ 1- bit-count !
$4 PORTD pin_high? if $200 1 vx1 +! else 0 1 vx0 +! then
bit-count @ rshift
inp-byte @ or inp-byte !
bit-count @ 0= if
inp-byte @ inp-buf byte-count @ + c!
byte-count @ 1+ dup byte-count !
-timer  +int-bs
then
;

: _startbit
10 bit-count !
0 inp-byte !
-int-bs
\  [ 10 us/ ] literal ?delay
+timer

13 = if  -timer cr ." Stop Reciving!" else +timer  then
;
variable pre

: test
cr ." Start!"
inp-buf 20 erase
pre @ 0= if 1 pre ! then
0 _finish !
0 vx !
0 vx1 !
0 vx0 !
0 byte-count !
0 inp-byte !
$b TCCR1B c!   \ предделитель на 64 + режим CTC

0 OCR1AH c!
26 OCR1AL c!
['] timer-int-isr TIMER1_COMPAAddr int!

$4 PORTD pin_input
\ $4 PORTD pin_pullup_on
['] _startbit INT0Addr int!
INT0rising EICRA c!   \ превывание по спаду
+int-bs   \ разрешаем превывания
300 ms
+int
begin
1000 ms
key?
until
-timer -int-bs
inp-buf 10 cr dump
;


Источник данных: RFID считыватель.
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение ilya73 » 27 окт 2012, 22:27

Хочется поделится "наработками" в области "softuart" (частично).
Источник данных RFID -считыватель, параметры 9600,N,8,1.
Работает! :D
Код: Выделить всё
marker =suart=
2 constant INT0rising
1 constant INT0enabled

variable bit-count
variable byte-count
variable inp-byte
variable laby

create inp-buf 20 allot

\ Разрешаем прерывния
: +int-bs INT0enabled EIMSK c! ;
\ Запрещаем превывания
: -int-bs 0 EIMSK c! ;

\ Принимаем 1-ин байт
: recv-byte ( -- n )
0 inp-byte !
begin
$4 PORTD pin_low?
until
[ 70 us/ ] literal ?delay
8 0 do
[ 64 us/ ] literal ?delay
$4 PORTD pin_high? if 1 else 0 then
i lshift
inp-byte @ or inp-byte !
loop
[ 90 2* us/ ] literal ?delay
inp-byte @
;

: recv-byte2buf
recv-byte
inp-buf byte-count @ + c!
1 byte-count +!
;

: startbit
-int-bs
14 0 do
recv-byte2buf
loop
1 laby !
;
variable pre

: s>nh
base @ >r hex
>r >r
0 s>d r> r> >number drop drop d>s
r> base !
;

\ Подсчёт контрольной суммы
: csum? ( -- f )
\ base @ hex
0
inp-buf 1+ dup 9 + swap
do
   ( 0 s>d) i 2 s>nh ( >number  drop drop d>s) xor
2   
+loop
( 0 s>d) inp-buf $b + 2 s>nh \ >number drop drop d>s
=
\ swap base !
;

: validcard?
0 s>d ( i) 2 >number  drop drop d>s
;

: test
cr ." Start!"
0 laby !
0 inp-byte !
$4 PORTD pin_input
$4 PORTD pin_pullup_on
['] startbit INT0Addr int!
INT0rising EICRA c!   \ превывание по спаду
+int-bs   \ разрешаем превывания
300 ms
\ +int
\ startbit
begin
laby @
if
\ inp-buf 10 cr dump
0 s>d inp-buf 5 + 6 hex >number drop drop cr ." Card number: " decimal d.
0 byte-count !
inp-buf 20 erase
+int-bs
then
key?
until
\ csum? cr ." check-sum=" .

;

Следующий шаг - связь с GSM модулем, ...
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 04 ноя 2012, 22:05

Слово key? только показывает наличие непрочитанного символа (байта) в буфере входного потока (приемника), но не считывает его.
Поэтому в конструкциях типа:
Код: Выделить всё
     ... begin ... key? until

если не предполагается использование принятого байта, его лучше "выбросить"
Код: Выделить всё
     ... begin ... key? until key drop

иначе вероятно возникновение неприятных неожиданностей.

Собственно к форту эта ремарка отношения не имеет.
Go forth
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение chu » 07 ноя 2012, 21:18

ilya73 писал(а):Хочется поделится "наработками" ...


Это правильно, это нам нужно :)
Читал твой текст, вникал, в силу своего разумения.
В процессе осмысления, делал наброски. ( типа школьного изложения -
смысл тот же, слова - свои :wink: )
В процессе "набрасывания" случился "рефакторинг" :shock: ( о! какие слова знаю )

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

Обработку принятых байтов ( вынес в отдельное определение)
и подсчет контрольной суммы оставил без изменений
( вникать не стал - из описания не очевидно, а "натуры" нету )

Код: Выделить всё

\
\ ilya  rfid Soft Serial Receiver
\
\ ==============================
  marker =suart=

   2 constant   INT0rising
   1 constant   INT0enabled


\ Разрешаем прерывния
  : +int-bs INT0enabled EIMSK c! ;

\ Запрещаем превывания
  : -int-bs 0 EIMSK c! ;

\ ==============================
\
\   vum@chu
\
\ ==============================
\

:  ssrx-bit@   ( c -- c' )

   1 lshift 
   [ 64 us/ ] literal ?delay
                           1
          $4 PORTD pin_high?  if
                          or  else
                  invert and  then
   ;

:  ssrx-c@   ( -- с )

   begin $4 PORTD pin_low? until  \ ожидаем старт бит

   [ 70 us/ ]   literal   ?delay

   0   ( c' )                     \ тут будем собирать приходящий байт
   8 0  do  ssrx-bit@      loop

   [ 90 2* us/ ] literal  ?delay  \ видима, стоповый битик тут у нас
   ;

\
\   Grove_-_125KHz_RFID_Reader.htm
\  принимаемый от rfid card reader'а информационный  пакет  длиною=   /card-packet
\  сохраняется в буфере по адресу ssrx-buf+1ячейка , в переменной ssrx-buf  =количество принятых байт

base @   
decimal   

         0 \ структура пакета  rfid card reader
         1  -- start-flag   \ $02
        10  --  card-id     \ Card number info
         2  --  card-cs     \ checksum
         1  --   end-flag   \ $03
constant       /card-packet

base !         \ восстановить основание

\  буфер под пакет
   variable  ssrx-buf   /card-packet allot \ типа строки со счетчиком
  : inp-buf  ssrx-buf 1 cells + ;                 \ для совместимостис ильей


\  увеличить на 1 счетчик байтов в буфере
: ssrx-buf++    ssrx-buf 1 over @ + swap ! ;

\  добавить принятый байт в буфер
: ssrx-buf+c!  ( c -- )   ssrx-buf @ inp-buf  +  !  ssrx-buff++  ;

\  прочитать весь пакет от ридера
: card-data@   /card-packet 0 do  ssrx-c@  ssrx-buf+c!  loop   ;

\  пакет принят?
: card-data?   ( -- f )   ssrx-buf  @  /card-packet = ;

\
: startbit    -int-bs card-data@ ;


\ ==============================
\   оставил без изменения *chu
\
\    INT0rising   INT0enabled
\    -int-bs      +int-bs     
\     csum?       validcard? 
\ ==============================
\

: s>nh
     base @ >r hex

         >r >r
       0 s>d r> r> >number drop drop d>s

    r> base !
   ;

\ Подсчёт контрольной суммы
: csum? ( -- f )
   \ base @ hex
   0
   inp-buf 1+ dup 9 + swap
   do
   ( 0 s>d) i 2 s>nh ( >number drop drop d>s) xor
   2
   +loop
   ( 0 s>d) inp-buf $b + 2 s>nh \ >number drop drop d>s
   =
   \ swap base !
   ;

: validcard?
        0 s>d ( i) 2 >number drop drop d>s
        ;

\
\ ==============================
\
\ определения не менял, просто выделил в отдельное слово


:  card-data.
    0 s>d inp-buf 5 + 6 hex >number drop drop cr ." Card number: " decimal d.
   ;

:  card-cs.    csum? cr ." check-sum=" .  ;

\
\ ==============================
\  дальше - опять отсебятина *chu

: test
        cr ." Start!"   
        $4 PORTD pin_input
        $4 PORTD pin_pullup_on
        ['] startbit INT0Addr int!
        INT0rising EICRA c!          \ прерывание по спаду
        +int-bs                      \ разрешаем прерывания
      \ +int
        300 ms

        0 ssrx-buf !    \ буфер пустой
        begin

        card-data?   if 
        card-data.      \
        card-cs.        \
        0 ssrx-buf !    \ обработано, сбросить счетчик
        +int-bs      then

        key? until
        key  drop
        ;

\ ==============================
\



Примечания к коду:
- код не тестировал, не отлаживал, мог где-нибудь наврать;
- очень нравится использовать слово -- . Позаимствовал его из SPF4 - очень удобно.
Его определение где-то тут уже приводил - кстати, прекрасный пример создания определяющих слов
фраза ssrx-buf 1 cells + card-id оставит на стеке адрес ( байта в буфере ) Card number info
возможно, его ( слово -- ) стоило назвать field;
- выделение памяти сразу же за объявлением переменной - не во всех форт-системах может прокатить.

Ну вот, отметился. Go forth.

PS. так и знал, что где-то наврал. исправил inp-buf
PPS упс, апять косяк, переменные же - двухбайтовые(одна ячейка)..., ща исправлю
Последний раз редактировалось chu 09 ноя 2012, 08:34, всего редактировалось 1 раз.
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 09 ноя 2012, 02:01

Давно тебя не было слышно! :)
Рефакторинг - это хорошо.
Сделал "передающую" часть СофтЮарта, проверил связь между 2-мя контроллерами - вроде работает! :D
Вот сейчас хочу попробовать услышать GSM.
Кста, очень помогла твоя
Код: Выделить всё
tttt1.frt
- замерил временные затраты кода и прикинул требуемые таймауты.
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 15 ноя 2012, 07:47

Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение ilya73 » 18 ноя 2012, 16:27

chu писал(а):Еще одна дискуссия о форте

"Знакомые" всё лица! :)
А у меня есть определённый прогресс (увидел вразумительный ответ) с GSM модулем. :Yahoo!:
Кста, очень интересный/навороченный девайс!
Пробовал "модифицировать" работу софт-юарта, но пока результат "0"-й.
Пытался заменить софтовые задержки на прерывания от таймера, но чё-то не идёт (трудно без осцилла увидеть 104 us ).
Может глянешь?
Код: Выделить всё
\ Software UART
=suart=
marker =suart=
2 constant INT0rising
1 constant INT0enabled

variable bit-count
variable byte-count
variable inp-byte
variable laby

create inp-buf 120 allot

\ Разрешаем прерывния
: +int-bs INT0enabled EIMSK c! ;
\ Запрещаем превывания
: -int-bs 0 EIMSK c! ;

\ Запускаем таймер
: +timer
-int
0 OCR1AH c!
$1a OCR1AL c!
$2 TIMSK1 c!   \ Прерывание по равенству знач. OCR1A
+int
;
\ stops the timer
: -timer
-int
0 TIMSK1 c!
0 OCR1AH c!
0 OCR1AL c!
+int
;

: byte2buf ( n -- )
inp-buf byte-count @ + c!
1 byte-count +!
;

: bit-tim
-timer
$4 PORTD pin_high? if 1 else 0 then
bit-count @ lshift
inp-byte @ or inp-byte !
1 bit-count +!
bit-count @ 8 =
if 0 bit-count ! inp-byte @ byte2buf +int-bs
1 laby !
else +timer then
;

: startbit
-int-bs
0 inp-byte !
$4 PORTD pin_low?
\ +timer
if +timer else +int-bs then
;


: testr
cr ." Start!"
0 inp-byte !
0 byte-count !
0 bit-count !
inp-buf 120 erase
$4 PORTD pin_input
$4 PORTD pin_pullup_on
$8 PORTD pin_output
$8 PORTD high
$b TCCR1B c!   \ предделитель на 64 + режим CTC
0 OCR1AH c!
$1a OCR1AL c!
['] bit-tim TIMER1_COMPAAddr int!
['] startbit INT0Addr int!
INT0rising EICRA c!   \ превывание по спаду
+int-bs   \ разрешаем превывания
+int

begin
100 ms

laby @ if inp-byte @ cr ." byte:" . 0 laby ! then
again
cr ." Stop!"
;


Идея такова: ожидаем обратный фронт и исполняем startbit которое запускает таймер 104 us. Обработчик таймера bit-tim.
Правда я поленился посчитать временные издержки в самом bit-tim :oops:
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение ilya73 » 18 дек 2012, 02:46

Кой-чего удалось добиться ("SoftUart"). :Yahoo!:
Наткнулся на грабли:
Привык делать так
Код: Выделить всё
create buf 100 allot

а требуется ~ так
Код: Выделить всё
variable buf 98 allot

чутка напрягло отсутствие слова
Код: Выделить всё
search \ ANS94

Эх! Кто-нить реализовал-бы его на ассме!? :wink: :oops:
ОФФ
Сейчас занялся "парсером" входящих at-данных.
Идея такова:
Обрабатываемые сигналы: входящий звонок и СМС - релизовал
Входящий звонок:
1) проверяем номер звонящего - реализовал
2) поднимаем трубку и подключаем микрофон к звуковому тракту - в процессе
СМС:
1) проверяем номер звонящего - реализовал
2) парсим содержимое СМС на команды - тут надо придумать ТЗ
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение dccharacter » 18 дек 2012, 03:20

>>а разобраться в примитивном синтаксисе форта гораздо легче, чем в си


!!!!!!!!!
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Форт-система

Сообщение elmot » 18 дек 2012, 10:00

форт-то сам по себе несложный. Только надо мозги вывернуть наизнанку, и на нем писать аккуратно - а то говнокод будет жуткий
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Форт-система

Сообщение ilya73 » 18 дек 2012, 22:00

elmot писал(а):форт-то сам по себе несложный. Только надо мозги вывернуть наизнанку, и на нем писать аккуратно - а то говнокод будет жуткий

Почти со всем согласен, за исключением "говнокода"!
Чуть очепятался и перешиваем Ардуину снова! :D
Ибо код с легкостью лезет в Флэш и трёт интерпретатор.
ilya73
 
Сообщения: 35
Зарегистрирован: 26 дек 2011, 23:04

Re: Форт-система

Сообщение chu » 16 апр 2013, 22:19

сборка amForth 5.1 для меги32 на 8МГц
"жырная" пршивка:
Код: Выделить всё

> amforth 5.1 ATmega32 8000 kHz
reset source= 2

> words
=draft= spi@ spi! -spi2x +spi2x spi_clk -spi +spi spi.f/128 spi.f/64 spi.f/16
spi.f/4 spi.mode3 spi.mode2 spi.mode1 spi.mode0 spi.MSTR spi.DORD spi.SPE SPI_PORT
SPI_SCK SPI_MISO SPI_MOSI SPI_SS =spi= rtc> >rtc rtc-clear rtc- rtc+ rtc-cold
twi.rtc@ twi.rtc! 12/24 clock_halt BIT_OUT BIT_SQWE BIT_RS1 BIT_RS0 RTC_RAM_LAST
RTC_RAM RTC_CONTROL RTC_YEAR RTC_MONTH RTC_DATE RTC_DAY RTC_HOURS RTC_MINUTES
RTC_SECONDS twi.ds1307 =ds1307= .buff eeprom> >eeprom ee/page twi.ee-loadblock
twi.ee-saveblock #page>addr twi.ee-c@ twi.ee-c! set-rw page-size twi.ee-addr
=twieeprom= twi.scan twi.ping? twi.status? twi.status twi.rxn twi.rx twi.tx twi.action
twi.stop twi.start twi.wait twi.off twi.init fast regular twi.bitrate =twi= --
=struct= portbit#: (portbit#) =portbit= us/ .us .ticks ?ticks ticks/1decr ticks/1us
?ticks. t1. ?tov1. t1@. tov1? t1@ <t1> ?delay delay <t1 t1> =tttt1= .x u*/mod
m*/ m+ 2! 2@ 2variable 2constant =double= range endcase endof of case evaluate
[evaluate] (evaluate) source-string str strlen .res environment? [environment?]
(environment?) imove =system= pin_pullup_on pin_pullup_off toggle pin@ pin_low?
pin_high? pin_input pin_output pin! wait_high wait_low is_high? is_low? pulse
low high portpin: bitmask: SPM_RDYAddr TWIAddr ANA_COMPAddr EE_RDYAddr ADCAddr
USART__TXCAddr USART__UDREAddr USART__RXCAddr SPI__STCAddr TIMER0_OVFAddr
TIMER0_COMPAddr TIMER1_OVFAddr TIMER1_COMPBAddr TIMER1_COMPAAddr TIMER1_CAPTAddr
TIMER2_OVFAddr TIMER2_COMPAddr INT2Addr INT1Addr INT0Addr TWAR TWDR TWSR_TWPS TWSR_TWS
TWSR TWCR_TWIE TWCR_TWEN TWCR_TWWC TWCR_TWSTO TWCR_TWSTA TWCR_TWEA TWCR_TWINT TWCR
TWBR SPMCR_SPMEN SPMCR_PGERS SPMCR_PGWRT SPMCR_BLBSET SPMCR_RWWSRE SPMCR_RWWSB
SPMCR_SPMIE SPMCR OSCCAL SP SREG_C SREG_Z SREG_N SREG_V SREG_S SREG_H SREG_T SREG_I
SREG PIND DDRD PORTD PINC DDRC PORTC PINB DDRB PORTB PINA DDRA PORTA ADC ADCSRA_ADPS
ADCSRA_ADIE ADCSRA_ADIF ADCSRA_ADATE ADCSRA_ADSC ADCSRA_ADEN ADCSRA ADMUX_MUX
ADMUX_ADLAR ADMUX_REFS ADMUX ACSR_ACIS ACSR_ACIC ACSR_ACIE ACSR_ACI ACSR_ACO
ACSR_ACBG ACSR_ACD ACSR SFIOR_ACME SFIOR UBRRL UBRRH UCSRC_UCPOL UCSRC_UCSZ
UCSRC_USBS UCSRC_UPM UCSRC_UMSEL UCSRC_URSEL UCSRC UCSRB_TXB8 UCSRB_RXB8 UCSRB_UCSZ2 
UCSRB_TXEN UCSRB_RXEN UCSRB_UDRIE UCSRB_TXCIE UCSRB_RXCIE UCSRB UCSRA_MPCM
UCSRA_U2X UCSRA_UPE UCSRA_DOR UCSRA_FE UCSRA_UDRE UCSRA_TXC UCSRA_RXC UCSRA UDR
SPCR_SPR SPCR_CPHA SPCR_CPOL SPCR_MSTR SPCR_DORD SPCR_SPE SPCR_SPIE SPCR SPSR_SPI2X
SPSR_WCOL SPSR_SPIF SPSR SPDR ICR1 OCR1B OCR1A TCNT1 TCCR1B_CS1 TCCR1B_WGM1
TCCR1B_ICES1 TCCR1B_ICNC1 TCCR1B TCCR1A_WGM1 TCCR1A_FOC1B TCCR1A_FOC1A TCCR1A_COM1B
TCCR1A_COM1A TCCR1A ASSR_TCR2UB ASSR_OCR2UB ASSR_TCN2UB ASSR_AS2 ASSR OCR2 TCNT2
TCCR2_CS2 TCCR2_WGM21 TCCR2_COM2 TCCR2_WGM20 TCCR2_FOC2 TCCR2 TIFR_TOV0 TIFR_OCF0
TIFR TIMSK_TOIE0 TIMSK_OCIE0 TIMSK OCR0 TCNT0 TCCR0_CS0 TCCR0_WGM01 TCCR0_COM0
TCCR0_WGM00 TCCR0_FOC0 TCCR0 MCUCSR_ISC2 MCUCSR MCUCR_ISC0 MCUCR_ISC1 MCUCR
GIFR_INTF2 GIFR_INTF GIFR GICR_IVCE GICR_IVSEL GICR_INT2 GICR_INT GICR WDTCR_WDP
WDTCR_WDE WDTCR_WDTOE WDTCR EECR_EERE EECR_EEWE EECR_EEMWE EECR_EERIE EECR
EEDR EEAR tasks alsotask onlytask multi single task-init tcb>size tcb>rp0 tcb>sp0
tcb>tid task: activate cell- task-awake task-sleep stop multitaskpause wake pass
follower status =multitask= end-code code assembler vocabulary >name >body postpone
=tiny-core= marker words show-wordlist applturnkey is Rdefer Edefer fill
!@spi c!@spi sleep wdr -wdt order set-order also forth-wordlist forth only wordlist 
definitions previous set-current nfa>lfa compare get-order get-current !e[]
@e[] environment end-code code abort abort" [char] immediate recurse user constant
variable [ ] ; :noname : does> latest reveal header create ?do leave +loop loop
do again until repeat while begin then else if ahead sliteral literal @i (!i-nrww)
!i @e !e not s>d up! up@ >< cmove> unloop i sp! sp@ rp! rp@ +! rshift lshift
1- 1+ xor or and 2* 2/ invert um* um/mod m* + - log2 d< d> 0> u> u< true 0 0<
> < 0= = <> r@ >r r> nip -rot rot drop over swap ?dup dup !u @u c@ c! ! @ (value)
execute exit .s ." s" ms 1ms dinvert d- d+ d2* init-user ee>ram ee-user source-tib
refill-tib tib 2swap d2/ cmove dnegate dabs d>s j * icompare search-wordlist
defer@ defer! to value unused noop ver ?stack rec-notfound rec-find rec-intnum
interpret depth rp0 sp sp0 warm cold rstf pause quit find-name parse-name /string
source cscan parse >number number char refill accept cskip throw catch handler
' type spaces space cr icount itype s, u>= u<= digit? ud/mod u0.r ud.r ud. u.
. d. .r d.r sign #> #s # <# hold hld tolower toupper within max min abs mod /
negate u/mod */ /mod */mod turnkey bl hex decimal bin ['] , compile ( \ wlscope
(create) allot here edp dp key? key emit? emit pad #tib >in cell+ cells base state
f_cpu int-trap int@ int! -int +int 1w.slot 1w.reset +usart ubrr tx?-poll tx-poll
rx?-isr rx-isr  ok
> .res
amforth 5.1 ATmega32 running at 8000 kHz
free FLASH cells        19056
free RAM bytes          1727
used EEPROM bytes       94
used data stack cells   0
used return stack cells 11
free return stack cells 29
ok
>
ok
>

можно сделать "худенькую", набрав в консоли =tiny-core=. останется то, что родил ассемблер АВРстудии плюс marker. слова-маркеры начинаются с = и им же заканчиваются. слово .res врёт - намудрили немцы, free FLASH cells надо делить напополам, а так - показывает байты.
параметры терминала 9600,8,N,1
Вложения
m32L-8MHz-v51.zip
(21.27 КиБ) Скачиваний: 0
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Re: Форт-система

Сообщение chu » 24 апр 2013, 16:28

robotech, :beer:
Аватара пользователя
chu
 
Сообщения: 77
Зарегистрирован: 23 сен 2010, 09:16
прог. языки: Forth

Пред.След.

Вернуться в МиниБот — национальный класс роботов

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

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