HIVE-Project

Retro Style Eigenbau Computer mit Parallax Propeller
Aktuelle Zeit: Di 7. Jul 2020, 06:35

Alle Zeiten sind UTC [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste
Autor Nachricht
BeitragVerfasst: Do 25. Feb 2016, 17:53 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
----------8<-----{20160225-1753-CET}----->8----------

Eigentlich wollte ich ja den spin2pasm-Branch von spin2cpp ausprobieren, aber irgendwie ist das noch zu heiß...

Status Quo: Ich hab den spin2pasm-Branch kompilieren können... aber Spinkram von interessanter Größe habe ich damit noch nicht nach PASM übersetzt bekommen, es fehlert mich an...

Stattdessen hab ich mal mit nur den Spin->C++-Features davon gespielt...

The source this is, Luke:
Code:
' mandelbrot-20150214-fds
'
con
  _clkmode = xtal1+pll16x
  _clkfreq = 80_000_000

  xmin=-563714457 ' -2.1
  xmax=187904819  '  0.7

  ymin=-322122547 ' -1.2
  ymax=322122547  '  1.2

  maxiter=24

  MPX=79          ' 0..79
  MPY=24          ' 0..24

  c4=1073741824

obj
  ser : "FullDuplexSerial"

pub main | c,cx,cy,dx,dy,x,y,xn,yn,rsq,iter,px,py

  ser.start(31, 30, 0, 115200)

  dx:=(xmax-xmin)/MPX
  dy:=(ymax-ymin)/MPY

  cy:=ymin
  repeat py from 0 to MPY
    cx:=xmin
    repeat px from 0 to MPX
      x:=0
      y:=0
      rsq:=0
      iter:=0
      repeat while iter=<maxiter and rsq=<c4
        xn:=((x**x-y**y)<<4)+cx
        yn:=((x**y)<<5)+cy
        x:=xn
        y:=yn
        rsq:=(x**x+y**y)<<4
        iter+=1
      cx+=dx
      ser.tx(iter+32)
    cy+=dy
    ser.tx(13)

  waitcnt(_clkfreq+cnt)
  ser.stop
  cogstop(0)
...das ist das Integerarrithmetik-Mandelbrötchen, in dem noch irgendwie ein kleiner Denkfehler im Mitzählen oder der Abbruchbedingung steckt... das Innere der Menge wird schon hinreichend korrekt bestimmt, aber bei den Farben drumrum verdaddelt's sich noch irgendwie...

....aber für den spin2cpp-Test kann es trotzdem gut herhalten...

...und es war einmal ein Makefile:
Code:
SPINSIM     = /opt/parallax/bin/spinsim
SPIN2CPP    = /opt/spin2cpp/bin/spin2cpp
SPINSTDLIB  = /opt/parallax.spin.src/spin

main.binary: main.spin Makefile
        PATH="/opt/parallax/bin:$PATH" $(SPIN2CPP) -L ../lib -L $(SPINSTDLIB) --binary main.spin

run: main.binary Makefile
        $(SPINSIM) main.binary -b

clean: Makefile
        rm -f main.binary *~


Tun oder nicht tun es du mußt...
Code:
$ ls -l
insgesamt 8
-rw-r--r-- 1 yeti yeti 842 Feb 25 17:27 main.spin
-rw-r--r-- 1 yeti yeti 385 Feb 25 17:45 Makefile
$ make
PATH="/opt/parallax/bin:ATH" /opt/spin2cpp/bin/spin2cpp -L /opt/parallax.spin.src/spin --binary main.spin
$ ls -l
insgesamt 40
-rw-r--r-- 1 yeti yeti 11405 Feb 25 17:46 FullDuplexSerial.cpp
-rw-r--r-- 1 yeti yeti   935 Feb 25 17:46 FullDuplexSerial.h
-rwxr-xr-x 1 yeti yeti  6388 Feb 25 17:46 main.binary
-rw-r--r-- 1 yeti yeti  1551 Feb 25 17:46 main.cpp
-rw-r--r-- 1 yeti yeti   778 Feb 25 17:46 main.h
-rw-r--r-- 1 yeti yeti   842 Feb 25 17:27 main.spin
-rw-r--r-- 1 yeti yeti   385 Feb 25 17:45 Makefile
$ make run
/opt/parallax/bin/spinsim main.binary -b
!!!!!!!!!!!!!!!"""""""""""""(&###$('$)*'&%)*####################"""""""""""""""+
!!!!!!!!!!!!!"""""""""$,%)##'1%$%$%%')#######$0'%+$$%'0(%&-$$1%$####$"""""""""""
!!!!!!!!!!!"""""""%$)###$&&)+%%'%)#######$)%%&&$$'&%4&(+,)+3'$$$&%'&####)$""""""
!!!!!!!!!"""""()&##$$$,'$,$$'&#######5%&(/)$$$$)+%%&'1*99/**)(%+$$$%%(####'%$"""
!!!!!!!!""""(##$%-+%%%%%%$#######)+)('%$$$$&%%))&)'/,9999999+'&%%%&($$$/####$$('
!!!!!!!"""#%-+($%$(2$%########&')$$$$$'&%&'-,+)-(+)*/999999..)+('&&&&/&&$&###$&&
!!!!!!""-)&%&&%%$##########$$$$$%.1'%%&+&'+.99908999999999999999/+.9739)%*$####'
!!!!!"$&+$/$##########$$$/)+*'&%%%%,4&&'+-+799999999999999999999999997(&++$$####
!!!!"6+%#######')$$$)%&(,,**-+''(-*('((/259999999999999999999999999994,)4-&$%###
!!!!+###9'(&(($$&)(*%*0*20922+89-7,)),*99999999999999999999999999999999+''*$&'##
!!!!#,%'&&)$$$*(%%%%+''++.7999999999902999999999999999999999999999999999'%0$,'-#
!!!#'$$$$$$%'**&**)).24.69999999999999999999999999999999999999999999999'(%)$$%&#
!!!69999999999999999999999999999999999999999999999999999999999999992++'&(%*$$(%#
!!!#'$$$$$$%'**&**)).24.69999999999999999999999999999999999999999999999'(%)$$%&#
!!!!#,%'&&)$$$,(%%%%1''++.7999999999902999999999999999999999999999999998'%-$+')#
!!!!9###+'(&(($$&)(+%*/*30926+69-7,)),*99999999999999999999999999999998+''-$&'##
!!!!"+*%#######')$$$)%&(,1**-+''(4*('((0259999999999999999999999999994,)47&$%###
!!!!!"$&*$+$##########$$$/)0)'&%%%%+*&&'+-+799999999999999999999999999(&/5$$####
!!!!!!"",)&%&&%%$##########$$$$$%+,'%%&6&'+.99908999999999999999/+.9939)%*$####'
!!!!!!!"""#%+3($%$()$%########&'*$$$$$'&%&'/,+)0(+)*/999999..)+('&&&&/&&$&###$&&
!!!!!!!!""""(##$%,+%%%%%%$#######)+)('%$$$$&%%))&)'2,9999999+'&%%%&($$$.####$$('
!!!!!!!!!"""""*)&##$$$)'$+$$'&#######6%&(,,$$$$),%%&'-*99/**)(%*$$$%%(####'%$"""
!!!!!!!!!!!"""""""%$,###$&&-.%%'%)#######$)%%&&$$'&%.&(+,)+/'$$$&%'&####*$""""""
!!!!!!!!!!!!!"""""""""$*%)##'*%$%$%%')#######$2'%5$$%'0(%&0$$)%$####$"""""""""""
!!!!!!!!!!!!!!!"""""""""""""(&###$('$+*'&%)0####################""""""""""""""")
$ _
Na? Wie ist das?
Von Spin zu Binary ohne "offiziellen" Spin-Compiler...
Nebenbei zeigt's beim Lauf via spinsim mit "-b" Option auch noch wie spinsim die serielle Ausgabe auf Pin 30/31 "versteht" und ins Terminal leitet...

Ist doch hübsch, oder?

...und eiiines Taaages wird auch die Spin->PASM-Übersetung mich nimmer anzicken...

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Zuletzt geändert von yeti am Mi 12. Dez 2018, 20:26, insgesamt 4-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Do 25. Feb 2016, 18:27 
Offline

Registriert: So 24. Mai 2009, 11:24
Beiträge: 590
assimlilieren es du musst ;)

also... mal zum verständnis für die unimatrix: du schreibst spin code und schubst das durch ein gcc gewusel, damit am ende ein binärer code entsteht, den der hive dann ausführen kann...? und für das ganze muss auch noch ein pinguin her halten...? heist der pinguin debian, oder doch eher ubuntu?

auf jedem sieht das interessant aus :) ik glaub, mein hive sollte auch wieder was tun... der steht nen bissl sinnlos herum....


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Do 25. Feb 2016, 18:53 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
BorgKönig hat geschrieben:
assimlilieren es du musst ;)

also... mal zum verständnis für die unimatrix: du schreibst spin code und schubst das durch ein gcc gewusel, damit am ende ein binärer code entsteht,
Spin->C++ mittels spin2cpp, danach C++->ASM->Binär mit PropGCC und spinsim simuliert dann einen Propeller, sodaß zum Test das Ausgraben eines Echtpropellers aus meinen Microcontrollersedimenten unterlassen werden kann.

BorgKönig hat geschrieben:
den der hive dann ausführen kann...?
Von Hive war da nirgendwo die Rede.

BorgKönig hat geschrieben:
und für das ganze muss auch noch ein pinguin her halten...? heist der pinguin debian, oder doch eher ubuntu?
Für mich nur das Original! :-P

BorgKönig hat geschrieben:
auf jedem sieht das interessant aus :) ik glaub, mein hive sollte auch wieder was tun... der steht nen bissl sinnlos herum....
Meiner ooch... die Single-Propeller-Boards fasse ich öfter mal an, wenn spinsim nicht ausreicht. Ich finde spinsim für die kleine Propellerei zwischendurch sehr angenehm. Solange es nur um 'nen nackischen Prop geht, tut's das ganz gut...

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 08:04 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
----------8<-----{20160226-0804-CET}----->8--------

Gib mir ein "ÖÖÖöööh???"!
Code:
$ cat main1.spin
pub main | a,b,c
 a:=123
 b:=456
 c:=a+b
$ /opt/spin2cpp/bin/spin2cpp --asm main1.spin
$ cat main1.pasm
DAT
        org     0
main
main_ret
        ret

$ _
ÖÖÖöööh???
...ist der jetzt schlau und erkennt die im Weiteren nimmer benutzte Variable "c" und optimiert die somit insgesamt überflüssige Berechnung weg?

Gib mir ein "AAAaaah!!!"!
Code:
$ cat main2.spin
pub main
 qnd(987,654)

pub qnd(b,c)
  return a+b

$ /opt/spin2cpp/bin/spin2cpp --asm main2.spin
$ cat main2.pasm
DAT
        org     0
main
        mov     qnd_b_, imm_987_
        mov     qnd_c_, imm_654_
        call    #qnd
main_ret
        ret

qnd
        add     qnd_a_, qnd_b_
        mov     result_, qnd_a_
qnd_ret
        ret

imm_654_
        long    654
imm_987_
        long    987
qnd_a_
        long    0
qnd_b_
        long    0
qnd_c_
        long    0
result_
        long    0
$ _
AAAaaah!!!
Wir werden wohl doch noch Freunde!
\o/

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 09:00 
Offline
Benutzeravatar

Registriert: Fr 30. Sep 2011, 13:08
Beiträge: 2631
Hi yeti,

Was macht er aus Arrays von Variabeln wo nur die erste als @Var übergeben wird?

Löscht er die nachfolgenden einfach weg? Oder behält er den Speicherplatz der ansonsten benötigten Variabeln bei.

Beispiel aus FullDuplexSerial.spin.
Code:
[/VAR

  'Global variable declarations

  long  cog           'cog flag/id

  '9 longs, MUST be contiguous
  long  rx_head                 
  long  rx_tail
  long  tx_head
  long  tx_tail
  long  rx_pin
  long  tx_pin
  long  rxtx_mode
  long  bit_ticks
  long  buffer_ptr
....

PUB Start(rxPin, txPin, mode, baudrate) : okay
  longfill(@rx_head, 0, 4)                              'zero out the buffer pointers
  longmove(@rx_pin, @rxpin, 3)                          'copy the start parameters to this objects pin variables
....


Das Problem ist das der Aufruf der originalen Variabelnplätze mit anderen Variabelnnahmen oder lokalen Bezeichnungen erfolgen kann.

_________________
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 11:18 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
----------8<-----{20160226-1118-CET}----->8----------

Ich seh da kein Array!
:-P

...aber ich denk, ich kappier was Du meinst...

Code:
$ cat main3.spin
var
  long  somevar

  '9 longs, meant to be contiguous
  long  othervar0
  long  othervar1
  long  othervar2
  long  othervar3
  long  othervar4
  long  othervar5
  long  othervar6
  long  othervar7
  long  othervar8

pub main
  othervar4:=othervar4
  othervar6:=othervar2

  othervar0:=othervar8
  othervar2:=othervar6
$ /opt/spin2cpp/bin/spin2cpp --asm main3.spin
$ cat main3.pasm
DAT
        org     0
main
        mov     othervar6, othervar2
        mov     othervar0, othervar8
        mov     othervar2, othervar6
main_ret
        ret

othervar0
        long    0
othervar2
        long    0
othervar4
        long    0
othervar6
        long    0
othervar8
        long    0
$ _
"somevar", sowie die nicht benutzten "othervar$X" sind wegoptimiert und die Überlebenden hat er in der Reihenfolge ihrer Definition angelegt.

Ich kommentiere diese Art der Arraybildung mal demonstrativ nicht!

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Zuletzt geändert von yeti am Fr 26. Feb 2016, 18:04, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 14:31 
Offline
Benutzeravatar

Registriert: Fr 30. Sep 2011, 13:08
Beiträge: 2631
Treffer versenkt. :)

_________________
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 18:55 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
PIC18F2550 hat geschrieben:
Treffer versenkt. :)
Ich find's suuuper! ;-D

Sich auf die relative Lage im Speicher eigentlich voneinander unabhängiger Variablen zu verlassen, war mir schon immer unheimlich.

Die Anweisung im Quelltext, daß ein gewisser Bereich von Variablen gefälligst in Anzahl, Typen und Reihenfolge nicht verändert werden soll, ist nur ein Kommentar in einer(!) menschlichen Sprache und ganz schnell Opfer für's nicht verstanden oder ignoriert Werden. Insbesondere dem Compiler ist sie Wurst...

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 23:13 
Offline
Benutzeravatar

Registriert: Fr 30. Sep 2011, 13:08
Beiträge: 2631
Es gibt noch mehr versteckte Arrays.

Code:
SUB array1(a,b,c)
  subroutine1(@a)


oder

Code:
SUB array2 | a,b,c
  subroutine2(@a)


Das rührt daher das die Programmierer lieber mit Klarnahmen als mit Pointern arbeiten.

Ich weiss nicht ob das hilft.

Code:
SUB array1(a,b,c)
  b := b
  c := c
  subroutine1(@a)


Wenn der compiler den Quatsch nicht durch Optimierung entfernt sollte alles stimmen.

_________________
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: spin2cpp
BeitragVerfasst: Fr 26. Feb 2016, 23:38 
Offline
Benutzeravatar

Registriert: Fr 27. Aug 2010, 14:48
Beiträge: 2072
Wohnort: Wrong Planet
Das Mandelbrötchen benutzt "FullDuplexSerial" erfolgreich. Die Spin->C++-Übersetzung hat also diese Übergabe in "FullDuplexSerial" nicht geshreddert...

Übersetzung nach C statt C++ per "--ccode"-Option fehlert in "FullDuplexSerial", aber da seh ich keinen Zusammenhang zu den Parameterblöcken...

...und das "--asm"-Jedöns ist eh noch ganz heiße Ware...

Das muß definitiv nochn bissl auf die Weide,,,

Wir haben Propeller... wir haben gelernt zu warten...

_________________
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"Stop slavery! Free all mitochondria!" — Yeti.
"Vrijdag voor VT100!" — Yeti.
"There is no PLANET-B!" — ???


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5  Nächste

Alle Zeiten sind UTC [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de