Перейти к содержанию
    

А вот бы на FORTH написать...

Да, обратите внимание (если еще не зарегистрировались на Forth форуме), что регистрация не автоматическая - надо писать письмо админу (бо спамерюги замучили)

Да я вроде уж пытался, да что-то помешало... А может, не помешало, надо бы почту проверить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я вроде уж пытался, да что-то помешало... А может, не помешало, надо бы почту проверить.

 

Аккаунт уже активирован:)

 

P.S. Один из возможных вариантов сделать Форт для MSP430 это использовать

базис PDP-11 для tinyboot т.к. архитектуры близкие. n-ое время назад была

первая, не завершённая, попытка сделать это:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё, временно перемещаюсь на fforum , а сюда выложу конечный результат (если будет), ну или промежуточный. (ые)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

А каким фортом для MSP пользуетесь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А каким фортом для MSP пользуетесь?

 

Вынужден огорчить :laughing: , никакого особого форта для MSP430 у меня нет, пишу на ассемблере.

 

НО! Forth - это прежде всего технология программирования ( философия решения задач ), и уже затем - язык и всё такое прочее...

 

Первый источник идеи - A 3-INSTRUCTION FORTH FOR EMBEDDED SYSTEMS WORK http://pygmy.utoh.org/3ins4th.html

Второй - виртуальная форт-машина, аналогичная имеющейся в SwiftX MSP430,

а также небольшой набор традиционных для форта примитивов, реализованных на ассемблере.

Плюс форт-сервер ( в терминологии не уверен) созданный в ростокском универе во времена оно.

Высокоуровневое определение этого сервера :

 

: Server BEGIN addr execute ACK char_send AGAIN ;

 

Как это работает.

Иаровский асм генерит код , который шьется в чип, кроме этого генерит "таблицу перекрестных ссылок" ( my_application.map ), в которой приводится однозначное соответствие цепочка_символов == число. Вырезка из этого файлика скармливается SPF4:

 

\

\
\ в словаре XTARGET создаются словари MSP430, TARGET, XDEBUG
\

VOCABULARY XTARGET ALSO XTARGET DEFINITIONS

VOCABULARY MSP430	\ определения регистров и битов процессора
VOCABULARY TARGET 	\ application. слова-константы содержат адреса целевых п/п
VOCABULARY XDEBUG	\ обмен с target, отладочные\тестовые "скрипты"

\
\
     ALSO MSP430  DEFINITIONS

: EQU CONSTANT ;
 S" E:\vm_working\mast_tst\f235\Host\msp430x23x.f" INCLUDED


\
\
     ALSO TARGET DEFINITIONS

TRUE VALUE MAP?
\ Благодарность VoidVolker. С его великодушной помощью написано следующее:
: NUMBER 0 0 2SWAP >NUMBER NIP IF 2DROP FALSE ELSE D>S TRUE THEN ;
: DO-MY CREATED BASE @ HEX NextWord NUMBER 0= THROW ,  BASE ! DOES> @ ; 
: NOTFOUND ( a u -- )
  2DUP 2>R ['] NOTFOUND CATCH
  IF
    2DROP MAP? IF 2R@ DO-MY ELSE -2003 THROW THEN
  THEN
  RDROP RDROP
  ;
S" E:\vm_working\mast_tst\f235\Host\app.f" INCLUDED

FALSE TO MAP?

 

MSP430 по сбросу и после необходимой инициализации крутится в п/п Server - ожидает 16-бит слово

и делает переход по этому адресу.

 

;

;
execute_:		; ( xt -- )
           mov     T,W
           tpop
           br      W

;
ACK         EQU     0x90

;
server:
           bis.b   #BIT0,&P1OUT         ; LED+
           call    #addr
           bic.b   #BIT0,&P1OUT         ; LED-
           call    #execute_
           tpush
           mov     #ACK,T
           call    #char_out
           jmp     server
;

 

Всё! :07:

Остальным я рулю из консоли SPF4.

 

     ALSO XDEBUG DEFINITIONS

\ *********************************************************
\ работа с целевым процессором
\

0x90 VALUE ACK	\ подтверждение от target device

: ok?  ( c -- ) CommIn DUP ACK = NOT IF CR ." target no ACK,received=" SPACE . ABORT ELSE DROP THEN ;

: c>t  ( c -- )	\ переслать байт, принять эхо, сравнить
      DUP CommOut CommIn 2DUP
      = NOT IF CR . ." <-<" . 
               CR ." bad connection. need to reset target" ABORT
            THEN 2DROP  ;

: >t   ( n -- ) \ переслать слово (2бйта)
      DUP 0xFF AND c>t 8 RSHIFT c>t ;

: t>   ( -- n ) \ принять 2байта от target device
      CommIn 0xFF AND CommIn 0xFF AND 8 LSHIFT + ;

: >x >t ok? ;   \ выполнить п/п в target device    

: >s   ( n -- ) \ положить слово на верхушку целевого стека параметров 
      addr >t  >t ok? ;
: s>   ( -- n ) \ 
      eword >t t> ok? ;

: t!   ( n a -- )    \ записать n по адресу a
      DUP RAMEND > ABORT" address not valid"  \ ОЗУ и периферия
      SWAP >s DUP >s
      0x00 0x100 WITHIN
      IF  cstore
      ELSE store
      THEN >x  ;

: t@   ( a -- n ) \ прочитать содержимое a
      DUP  >s
      0x00 0x100 WITHIN   \ байт?
      IF  cfetch
      ELSE fetch 
      THEN  >x s>  ;

 

Такой ( наверное довольно громоздкий ) подход позволяет не прошив ни байта кода сверх имеющегося,

прощупать каждый регистр, каждый бит HW периферии ( как на борту процессора так и вовне ),

настроить периферию на любой режим работы и выбрать оптимальный\целесообразный и только потом написать фрагмент кода ( на асме :wacko: ) с последующим тестированием ( обязательно ). Зачастую этот процесс идет параллельно с изучением datasheet

на соответствующий периферийный модуль.

Конечно, дело не ограничивается установкой битов, чтением регистров и тд. Взможность писать форт-определения ( в SPF4 ),

реализующие какие-то более сложные алгоритмы работы target device, присутствуют в полной мере.

 

Ну вот, как-то так.

 

;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот, как-то так.

;)

Понятно, спасибо. Я примерно то же в CamelForth проделывал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как это работает.
Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?

 

Да, практически так и есть.

 

Кроме базового набора примитивов имеется также коллекция ассемблерных подпрограмм,

обслуживающих аппаратные модули контроллера.

 

Вероятно позже будет реализован внутренний ( адресный ) интерпертатор ШК

для обеспечения верхнего уровня функциональности создаваемого прибора.

 

Иными словами, в МК форта в чистом виде как бы и нет, но дух форта - присутствует B)

В основном эксплуатируется заточенность форта для тестирования/отладки "железа".

 

PS. Moving Forth

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересный подход...

А что если прогнать через SPF сишный листинг (см. ниже) и заставить его сделать зеркало целевой системы на писишном хосте.

1102U_430_00_00.elf:     file format elf32-msp430

SYMBOL TABLE:
00001100 l    d  .text	00000000 .text
00000200 l    d  .data	00000000 .data
0000020c l    d  .bss	00000000 .bss
0000ffe0 l    d  .vectors	00000000 .vectors
00000000 l    d  .stab	00000000 .stab
00000000 l    d  .stabstr	00000000 .stabstr
00000130 l       *ABS*	00000000 MPY
00000132 l       *ABS*	00000000 MPYS
00000134 l       *ABS*	00000000 MAC
00000136 l       *ABS*	00000000 MACS
00000138 l       *ABS*	00000000 OP2
0000013a l       *ABS*	00000000 RESLO
0000013c l       *ABS*	00000000 RESHI
0000013e l       *ABS*	00000000 SUMEXT
00000020 l       *ABS*	00000000 P1IN
00000021 l       *ABS*	00000000 P1OUT
00000022 l       *ABS*	00000000 P1DIR
00000023 l       *ABS*	00000000 P1IFG
00000024 l       *ABS*	00000000 P1IES
00000025 l       *ABS*	00000000 P1IE
00000026 l       *ABS*	00000000 P1SEL
00000028 l       *ABS*	00000000 P2IN
00000029 l       *ABS*	00000000 P2OUT
0000002a l       *ABS*	00000000 P2DIR
0000002b l       *ABS*	00000000 P2IFG
0000002c l       *ABS*	00000000 P2IES
0000002d l       *ABS*	00000000 P2IE
0000002e l       *ABS*	00000000 P2SEL
00000018 l       *ABS*	00000000 P3IN
00000019 l       *ABS*	00000000 P3OUT
0000001a l       *ABS*	00000000 P3DIR
0000001b l       *ABS*	00000000 P3SEL
0000001c l       *ABS*	00000000 P4IN
0000001d l       *ABS*	00000000 P4OUT
0000001e l       *ABS*	00000000 P4DIR
0000001f l       *ABS*	00000000 P4SEL
00000030 l       *ABS*	00000000 P5IN
00000031 l       *ABS*	00000000 P5OUT
00000032 l       *ABS*	00000000 P5DIR
00000033 l       *ABS*	00000000 P5SEL
00000034 l       *ABS*	00000000 P6IN
00000035 l       *ABS*	00000000 P6OUT
00000036 l       *ABS*	00000000 P6DIR
00000037 l       *ABS*	00000000 P6SEL
00000070 l       *ABS*	00000000 U0CTL
00000071 l       *ABS*	00000000 U0TCTL
00000072 l       *ABS*	00000000 U0RCTL
00000073 l       *ABS*	00000000 U0MCTL
00000074 l       *ABS*	00000000 U0BR0
00000075 l       *ABS*	00000000 U0BR1
00000076 l       *ABS*	00000000 U0RXBUF
00000077 l       *ABS*	00000000 U0TXBUF
00000070 l       *ABS*	00000000 UCTL
00000071 l       *ABS*	00000000 UTCTL
00000072 l       *ABS*	00000000 URCTL
00000073 l       *ABS*	00000000 UMCTL
00000074 l       *ABS*	00000000 UBR0
00000075 l       *ABS*	00000000 UBR1
00000076 l       *ABS*	00000000 RXBUF
00000077 l       *ABS*	00000000 TXBUF
00000070 l       *ABS*	00000000 UCTL0
00000071 l       *ABS*	00000000 UTCTL0
00000072 l       *ABS*	00000000 URCTL0
00000073 l       *ABS*	00000000 UMCTL0
00000074 l       *ABS*	00000000 UBR00
00000075 l       *ABS*	00000000 UBR10
00000076 l       *ABS*	00000000 RXBUF0
00000077 l       *ABS*	00000000 TXBUF0
00000070 l       *ABS*	00000000 UCTL_0
00000071 l       *ABS*	00000000 UTCTL_0
00000072 l       *ABS*	00000000 URCTL_0
00000073 l       *ABS*	00000000 UMCTL_0
00000074 l       *ABS*	00000000 UBR0_0
00000075 l       *ABS*	00000000 UBR1_0
00000076 l       *ABS*	00000000 RXBUF_0
00000077 l       *ABS*	00000000 TXBUF_0
00000050 l       *ABS*	00000000 I2CIE
00000051 l       *ABS*	00000000 I2CIFG
00000052 l       *ABS*	00000000 I2CNDAT
00000071 l       *ABS*	00000000 I2CTCTL
00000072 l       *ABS*	00000000 I2CDCTL
00000073 l       *ABS*	00000000 I2CPSC
00000074 l       *ABS*	00000000 I2CSCLH
00000075 l       *ABS*	00000000 I2CSCLL
00000076 l       *ABS*	00000000 I2CDRB
00000076 l       *ABS*	00000000 I2CDRW
00000118 l       *ABS*	00000000 I2COA
0000011a l       *ABS*	00000000 I2CSA
0000011c l       *ABS*	00000000 I2CIV
00000076 l       *ABS*	00000000 I2CDR
00000078 l       *ABS*	00000000 U1CTL
00000079 l       *ABS*	00000000 U1TCTL
0000007a l       *ABS*	00000000 U1RCTL
0000007b l       *ABS*	00000000 U1MCTL
0000007c l       *ABS*	00000000 U1BR0
0000007d l       *ABS*	00000000 U1BR1
0000007e l       *ABS*	00000000 U1RXBUF
0000007f l       *ABS*	00000000 U1TXBUF
00000078 l       *ABS*	00000000 UCTL1
00000079 l       *ABS*	00000000 UTCTL1
0000007a l       *ABS*	00000000 URCTL1
0000007b l       *ABS*	00000000 UMCTL1
0000007c l       *ABS*	00000000 UBR01
0000007d l       *ABS*	00000000 UBR11
0000007e l       *ABS*	00000000 RXBUF1
0000007f l       *ABS*	00000000 TXBUF1
00000078 l       *ABS*	00000000 UCTL_1
00000079 l       *ABS*	00000000 UTCTL_1
0000007a l       *ABS*	00000000 URCTL_1
0000007b l       *ABS*	00000000 UMCTL_1
0000007c l       *ABS*	00000000 UBR0_1
0000007d l       *ABS*	00000000 UBR1_1
0000007e l       *ABS*	00000000 RXBUF_1
0000007f l       *ABS*	00000000 TXBUF_1
00000055 l       *ABS*	00000000 SVSCTL
00000128 l       *ABS*	00000000 FCTL1
0000012a l       *ABS*	00000000 FCTL2
0000012c l       *ABS*	00000000 FCTL3
00000059 l       *ABS*	00000000 CACTL1
0000005a l       *ABS*	00000000 CACTL2
0000005b l       *ABS*	00000000 CAPD
0000012e l       *ABS*	00000000 TA0IV
00000160 l       *ABS*	00000000 TA0CTL
00000170 l       *ABS*	00000000 TA0R
00000162 l       *ABS*	00000000 TA0CCTL0
00000164 l       *ABS*	00000000 TA0CCTL1
00000172 l       *ABS*	00000000 TA0CCR0
00000174 l       *ABS*	00000000 TA0CCR1
00000166 l       *ABS*	00000000 TA0CCTL2
00000176 l       *ABS*	00000000 TA0CCR2
0000011e l       *ABS*	00000000 TBIV
00000180 l       *ABS*	00000000 TBCTL
00000190 l       *ABS*	00000000 TBR
00000182 l       *ABS*	00000000 TBCCTL0
00000184 l       *ABS*	00000000 TBCCTL1
00000186 l       *ABS*	00000000 TBCCTL2
00000192 l       *ABS*	00000000 TBCCR0
00000194 l       *ABS*	00000000 TBCCR1
00000196 l       *ABS*	00000000 TBCCR2
00000188 l       *ABS*	00000000 TBCCTL3
0000018a l       *ABS*	00000000 TBCCTL4
0000018c l       *ABS*	00000000 TBCCTL5
0000018e l       *ABS*	00000000 TBCCTL6
00000198 l       *ABS*	00000000 TBCCR3
0000019a l       *ABS*	00000000 TBCCR4
0000019c l       *ABS*	00000000 TBCCR5
0000019e l       *ABS*	00000000 TBCCR6
00000056 l       *ABS*	00000000 DCOCTL
00000057 l       *ABS*	00000000 BCSCTL1
00000058 l       *ABS*	00000000 BCSCTL2
000001a0 l       *ABS*	00000000 ADC12CTL0
000001a2 l       *ABS*	00000000 ADC12CTL1
000001a4 l       *ABS*	00000000 ADC12IFG
000001a6 l       *ABS*	00000000 ADC12IE
000001a8 l       *ABS*	00000000 ADC12IV
00000140 l       *ABS*	00000000 ADC12MEM0
00000142 l       *ABS*	00000000 ADC12MEM1
00000144 l       *ABS*	00000000 ADC12MEM2
00000146 l       *ABS*	00000000 ADC12MEM3
00000148 l       *ABS*	00000000 ADC12MEM4
0000014a l       *ABS*	00000000 ADC12MEM5
0000014c l       *ABS*	00000000 ADC12MEM6
0000014e l       *ABS*	00000000 ADC12MEM7
00000150 l       *ABS*	00000000 ADC12MEM8
00000152 l       *ABS*	00000000 ADC12MEM9
00000154 l       *ABS*	00000000 ADC12MEM10
00000156 l       *ABS*	00000000 ADC12MEM11
00000158 l       *ABS*	00000000 ADC12MEM12
0000015a l       *ABS*	00000000 ADC12MEM13
0000015c l       *ABS*	00000000 ADC12MEM14
0000015e l       *ABS*	00000000 ADC12MEM15
00000080 l       *ABS*	00000000 ADC12MCTL0
00000081 l       *ABS*	00000000 ADC12MCTL1
00000082 l       *ABS*	00000000 ADC12MCTL2
00000083 l       *ABS*	00000000 ADC12MCTL3
00000084 l       *ABS*	00000000 ADC12MCTL4
00000085 l       *ABS*	00000000 ADC12MCTL5
00000086 l       *ABS*	00000000 ADC12MCTL6
00000087 l       *ABS*	00000000 ADC12MCTL7
00000088 l       *ABS*	00000000 ADC12MCTL8
00000089 l       *ABS*	00000000 ADC12MCTL9
0000008a l       *ABS*	00000000 ADC12MCTL10
0000008b l       *ABS*	00000000 ADC12MCTL11
0000008c l       *ABS*	00000000 ADC12MCTL12
0000008d l       *ABS*	00000000 ADC12MCTL13
0000008e l       *ABS*	00000000 ADC12MCTL14
0000008f l       *ABS*	00000000 ADC12MCTL15
000001c0 l       *ABS*	00000000 DAC12_0CTL
000001c2 l       *ABS*	00000000 DAC12_1CTL
000001c8 l       *ABS*	00000000 DAC12_0DAT
000001ca l       *ABS*	00000000 DAC12_1DAT
00000122 l       *ABS*	00000000 DMACTL0
00000124 l       *ABS*	00000000 DMACTL1
000001e0 l       *ABS*	00000000 DMA0CTL
000001e2 l       *ABS*	00000000 DMA0SA
000001e4 l       *ABS*	00000000 DMA0DA
000001e6 l       *ABS*	00000000 DMA0SZ
000001e8 l       *ABS*	00000000 DMA1CTL
000001ea l       *ABS*	00000000 DMA1SA
000001ec l       *ABS*	00000000 DMA1DA
000001ee l       *ABS*	00000000 DMA1SZ
000001f0 l       *ABS*	00000000 DMA2CTL
000001f2 l       *ABS*	00000000 DMA2SA
000001f4 l       *ABS*	00000000 DMA2DA
000001f6 l       *ABS*	00000000 DMA2SZ
00000120 l       *ABS*	00000000 WDTCTL
00000000 l       *ABS*	00000000 IE1
00000002 l       *ABS*	00000000 IFG1
00000001 l       *ABS*	00000000 IE2
00000003 l       *ABS*	00000000 IFG2
00000004 l       *ABS*	00000000 ME1
00000005 l       *ABS*	00000000 ME2
00000000 l    df *ABS*	00000000 gen.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00001132 l     O .text	00000040 SinTableData
00000000 l    df *ABS*	00000000 dco.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00000202 l     O .data	00000002 Last_TB_Tkts
00000204 l     O .data	00000002 LastTBR
00000206 l     O .data	00000002 DeltaTBR
00000208 l     O .data	00000001 NeedToCalibrateDCO
00000000 l    df *ABS*	00000000 main.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00000000 l    df *ABS*	00000000 measure.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00000000 l    df *ABS*	00000000 utils.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00000000 l    df *ABS*	00000000 TimerB.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
0000020a l     O .data	00000002 uiMainInterval
0000020c l       .bss	00000000 ulRealTime
00000000 l    df *ABS*	00000000 AD7708.c
00000130 l       *ABS*	00000000 __MPY
00000132 l       *ABS*	00000000 __MPYS
00000134 l       *ABS*	00000000 __MAC
00000136 l       *ABS*	00000000 __MACS
00000138 l       *ABS*	00000000 __OP2
0000013a l       *ABS*	00000000 __RESLO
0000013c l       *ABS*	00000000 __RESHI
0000013e l       *ABS*	00000000 __SUMEXT
00001696 l     F .text	0000004c WriteByte
000016e2 l     F .text	00000036 ReadByte
00001718 l     F .text	00000030 ReadWord
00000000 l    df *ABS*	00000000 libgcc2.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
00000000 l    df *ABS*	00000000 fp-bit.c
0000000c g       *ABS*	00000000 __data_size
00001540 g     F .text	000000d8 Init_7708
00001686 g     F .text	00000010 StartContConversion
00001172 g     F .text	0000002c Timerb_ccr1
000014b8 g     F .text	00000088 GenInit
000002b4 g     O .bss	00000008 ADC
00000210 g     O .bss	00000002 eStatus
000002bc g     O .bss	0000000c Urt
00001748 g       .text	00000000 __udivmodhi4
00000200 g     O .data	00000002 TB_Tkts_In_ms
00001790 g       .text	00000000 _etext
0000030e g     O .bss	0000000c Timers
00000128 g       *ABS*	00000000 __bss_size
0000178e  w      .text	00000000 __stop_progExec__
0000112c g       .text	00000000 _unexpected_1_
0000146a g       .text	00000000 vector_ffe0
000002c8 g     O .bss	0000000c Xslow
000012ec g     F .text	00000044 ADC_ZeroCal
000013fa g     F .text	0000000a Pause
00001330 g     F .text	00000094 ADC_FullCal
00001404 g     F .text	0000000e InitWatchDogPort
0000031a g     O .bss	0000001a tempFlashData
0000119e g     F .text	00000078 CalibrateDCO
00001468 g       .text	00000000 vector_ffec
0000112c  w      .text	00000000 vector_fff0
00001790 g       *ABS*	00000000 __data_load_start
0000112c g       .text	00000000 __dtors_end
0000112c  w      .text	00000000 vector_fffc
000002d4 g     O .bss	00000003 UsingChannelFlag
000002d8 g     O .bss	00000012 T
0000112c  w      .text	00000000 vector_ffe4
00001644 g     F .text	00000042 Calibrate
000002ea g     O .bss	0000000c Urcab
00000212 g     O .bss	00000004 RealTime
0000ffe0 g     O .vectors	00000020 InterruptVectors
00001118  w      .text	00000000 __do_clear_bss
0000142c g     F .text	00000014 TimerBInit
00001618 g     F .text	0000002c ReadRegister
0000112c  w      .text	00000000 vector_ffe2
0000112c  w      .text	00000000 vector_ffe8
00001130  w      .text	00000000 _unexpected_
000002f6 g     O .bss	0000000c Xfast
0000141c g       .text	00000000 vector_fffa
00001216 g     F .text	0000002a SetDCO
00001478 g     F .text	00000040 SetGenFreq
00001100  w      .text	00000000 _reset_vector__
0000112c g       .text	00000000 __ctors_start
0000146a g     F .text	0000000e DMA_isr
00001106  w      .text	00000000 __do_copy_data
0000020c g       .bss	00000000 __bss_start
0000112c  w      .text	00000000 vector_ffee
0000112c  w      .text	00000000 vector_fff4
00001240 g     F .text	000000ac main
00001172 g       .text	00000000 vector_fff8
0000112c  w      .text	00000000 vector_fff2
00010000 g       .vectors	00000000 _vectors_end
0000112c  w      .text	00000000 vector_ffe6
00000302 g     O .bss	0000000c Uref
0000112c g       .text	00000000 __dtors_start
0000112c g       .text	00000000 __ctors_end
00000a00 g       *ABS*	00000000 __stack
000013c4 g     F .text	00000002 PrepareBuffers
0000141c g     F .text	00000010 Timerb_ccr0
0000020c g       .data	00000000 _edata
00000334 g       .bss	00000000 _end
00001440 g     F .text	00000028 GetRealTime
000013c6 g     F .text	00000034 ADC_StartUp
00001764 g       .text	00000000 __udivmodsi4
0000112c  w      .text	00000000 vector_fff6
00000216 g     O .bss	00000066 usRegInputBuf
0000027c g     O .bss	00000038 usRegHoldingBuf
00001100  w      .text	00000000 __low_level_init
00001128  w      .text	00000000 __jump_to_main
00000200 g       .data	00000000 __data_start
0000112c  w      .text	00000000 vector_ffea
00001412 g     F .text	0000000a ClearWatchDog
00001468 g     F .text	00000002 TA0_isr

То есть, например, на входе имеем

00001216 g F .text 0000002a SetDCO

00001478 g F .text 00000040 SetGenFreq

А на выходе:

: SetDCO 1216 CALL ;

: SetGenFreq 1478 CALL ;

 

Просьба модераторам:

Перенесите, пожалуйста, обсуждение начиная с поста №4

в тему про форт, ибо есть желание продолжить, а тут не совсем к месту

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?

 

Виноват, был невнимателен. Прошу прощения.

 

Стек параметров в target присутствует .

 

Интересный подход...

 

Не уверен в удовлетворительном результате.

Заковыристая заковыка зарыта в передаче параметров С-функциям компилятором.

В случае с ассемблером - все проще: я сам организовываю передачу параметров п/программам

( через стек параметров ). Собственно это и есть виртуальная форт-машина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заковыристая заковыка зарыта в передаче параметров С-функциям компилятором.

В случае с ассемблером - все проще: я сам организовываю передачу параметров п/программам

НУ ладно. Оставим пока функции. Но переменные и регистры запросто можно проиндексировать.

Хотя и с функциями тоже не так всё сложно.

У меня например, обычно большинство функций типа viod(void), параметры модулей хранятся в локальных static-переменных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просьба модераторам:

Перенесите, пожалуйста, обсуждение начиная с поста №4

в тему про форт, ибо есть желание продолжить, а тут не совсем к месту

Темы разделил, но объединить с указанной не могу. Не хватает полномочий. Обратитесь с этой просьбой к супермодераторам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я понял, что сам шитый код и стек формируются и существуют на хост-машине, а таргет только исполняет базовый набор примитивов?

 

Шитого кода может и не существовать:) ( зависит от реализации Форта на хост машине )

 

При описанной схеме, предположу что, стек существует в таргете

и скорее всего , при необходимости, передаётся отдельными примитивами на хост.

( или управлятся командами чтения/записи ячеек памяти с хост машины )

 

При отладке слова управляющие конструкции такие как IF, WHILE ... лучше не исполнять в таргете,

а симулировать псевдо-исполнение в хосте. ( примерно такая схема принята в ff303 при исполнении байт-кода)

 

 

P.S. Оставлять ли топик в данной ветке или присоединить к существующему обсуждению Форт тематики

в разделе "Все остальные контроллеры" на усмотрение модераторов.

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Темы разделил, но объединить с указанной не могу. Не хватает полномочий. Обратитесь с этой просьбой к супермодераторам.

Объединил, полномочий хватило :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какие нынче контроллеры есть со встроенным FORTH или же компилятором FORTH удачным?

 

Amforth is a Forth system for the AVR ATmega microcontroller family. It works on the controller itself and does not depend on any additional hard- or software. amforth can be downloaded from the http://sourceforge.net/projects/amforth/files/ занимает менее 8К Flash, около 50 байт EEPROM и 100-150 байт RAM. последняя версия 2010-07-01

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...