Kan man skriva det här språket till en PIC?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Jaha, för att kunna flytta program mellan olika system. Okej... Det låter ju inte som om det skulle fungera... :roll:
Om dom nu skulle göra .net till... Amiga, kan vi säga, blir det inte långsamt om man gör så då?
Som jag har förstått det så går program snabbare om dom är gjorda för rätt system från början.
Eller har jag missförstått nånting?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Grejen är inte att samma .EXE-fil ska köra i vilken burk som helst, tanken är att samma KÄLLKOD ska kunna kompileras till de olika OS och då uppvisa lika funktioner.

Detta betyder att de olika OS'en ska ha samma parameterplacering för att rita t.ex. en fyrkant osv.
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Men... kompileras... Men varför kan jag inte köra vissa program då utan att hämta ".net" från Microsofts hemsida? Till exempel program till ATI:s grafikkort. Är det nån sorts bibliotek som körs mellan programmet och operativsystemet, eller istället för nånting i operativsystemet?

Tillägg:
Borde inte .net vara en del av kompilatorn i så fall?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Är det nån sorts bibliotek som körs mellan programmet och operativsystemet,

Ungefär.
Det är lite som att man måste ha en JRE för att köra "kompilerade" Java program.

Bygger/skriver man program för/mot .NET så måste man ha .NET stödet
installerat. Men det är väl ganska självklart.

> Borde inte .net vara en del av kompilatorn i så fall?

Ja *stödet* för .NET är en del av *kopilatorerna*, men inte själva .NET koden i sig.

> Men varför kan jag inte köra vissa program då utan att hämta ".net" från Microsofts hemsida?

Vad är skillnaden mot att man för andra program måste hemta en JRE
från SUN's hemsida ?
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31535
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg av MadModder »

Eller Flash för att köra swf-filer. :)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Att programmera pic-processorer med en 6502-liknande dialekt var intressant. :) Har du gjort den själv alltså?

Ja, det är en assemblator jag har skrivit själv. Den är skriven i sin egen assemblerdialekt, första versionen i Pascal för att komma igång. Då kunde den bara hantera x86, sedan lades 65C02 till. PIC har kommit till nu detta året. Resten är gammalt sedan över 10 år tillbaka.

Är det nåt som du vill hålla för dig själv, eller har du tänkt att ge andra tillgång till den på nåt sätt?

Det kan jag väl dela med mig av, fast PIC18-stödet följer inte med förän det är helt klart. Just nu är där några luckor av ren lättja. Det kommer att bli klart så snart vintern startat och därmed datorsäsongen.

Utdataformatet är binärfil, inte hexfil. Ser ingen anledning till att konvertera hit och dit. Jag flashar med en hembyggd hårdvara i form av en liten dator med V20-processor. Det ger bättre kontroll över tider o.dyl. än att försöka köra direkt från PC där det ligger interrupt och hackar i bakgrunden..
rehnmaak
Inlägg: 2204
Blev medlem: 13 december 2005, 01:43:41

Inlägg av rehnmaak »

>>>Sodjan

Vad sjutton är SAP ? :oops:

Såg en jobbannons där man skulle kunna SAP. Tydligen så har det uttrycket passerat mig obemärkt....
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47013
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Assembler är inte ett språk.
Assembler är en bunt mneonics, dvs förkortningar av maskinkod.
Assembler kan aldrig och blir aldrig ett språk.

Ett språk har en syntax, vilket assembler saknar.
Enkelt, eller hur.

Mneonics översätts till maskinspråk av en assemblator, varje mneonic har en direkt översättning till maskinkod, därför ser det olika ut för olika processorer.

Ett språk kan, i princip porteras till valfri processor, om det finns en kompilator.
Assembler kan inte porteras.
Användarvisningsbild
Henrik
Inlägg: 661
Blev medlem: 26 maj 2003, 23:39:14
Ort: Göteborg
Kontakt:

Inlägg av Henrik »

SAP är en av de största (den största?) affärslogistiksystemtillverkarna. SAP kör till viss del med sitt eget språk, och då menar jag inte tyska...

Tillbaks On Topic!

Zmod: Assemblerär nisch, då varje processor kör sin typ av assembler. Du har störst nytta av att lära dig C, det är en mycket bra grund till all typ av programmering, även om du vill/behöver lära dig något annat språk så småningom. Man måste inte först lära sig assembler för att sedan "kliva upp" till C. Vissa på forumet (och tydligen din gymnasielärare...) skulle dock säga att det är väldigt bra att göra så för att då känner man bättre till vad som händer under skalet, alltså vad som händer med din C-kod när den kompilerats till assembler. Det fina med C är att det går utmärkt att skriva kod både maskinnära såväl som i högre abstraktionsnivåer. Alla vanliga processorer har kompilatorer för C.
Jag tycker att assembler är ett "nödvändigt ont" och bör undvikas när det inte är absolut nödvändigt (som i ytterst tidskritiska funktioner till exempel, när varje bråkdel av sekund räknas).
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg av Marta »

Tja, det är väl inte helt rätt att degradera assembler till icke-språk. Då skulle kinesiska inte vara ett språk eftersom vi i allmänhet inte förstår det. Däremot kan det läsas och skrivas ned igen med ungefär samma betydelse i ett annat språk av någon som kan båda språken. Detsamma kan ett assemblerprogram.

Angående syntax så finns det visst i assembler, i allra minst samma grad som andra språk. Det är inte bara att blanda och ge. Prova att skriva adresseringsmode först och sedan label och därefter OP t.ex. i en assemblator som vill ha label, op, adress och se om det kommer ut maskinkod eller felmeddelanden....
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

:)

Nu förstår jag ungefär vad .net är. Tror jag... :wink: Resten kan jag väl läsa mig till nånstans, men jag kan ju fråga lite mer...
Är det nånting som översätter funktions-anrop alltså? Eller innehåller det omgjorda kopior av operativsystemets funktioner så att det inte ska bli långsamt när det måste gå genom ett extra lager?
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Zmod:
Pic-processorernas assembler ser lite annorlunda ut. Det du använde var ganska likt 6502, så jag tänkte försöka jämföra det med pic-versionen.
6502 har en ackumulator (A) och två register (X och Y). Pic har bara W.
Pic 18 har lite fler instruktioner än 16-serien, men det kan du ju titta på senare om du vill.

Tillägg:
Här ser "=" ut som minustecken av nån anledning. Om man förstorar texten lite så blir det som det ska.

6502:

Kod: Markera allt

LDA #7         ; A = 7.
STA antal      ; antal = A.
Pic 16:

Kod: Markera allt

movlw   d'7'   ; w = 7.
movwf   antal  ; antal = w.
6502:

Kod: Markera allt

LDA 7         ; A = innehållet i adress 7.
STA antal     ; antal = A.
Pic 16:

Kod: Markera allt

movf    d'7',w  ; w = innehållet i adress 7.
movwf   antal   ; antal = w.
6502:

Kod: Markera allt

vaenta:

          ; (Man hoppar hit med "JSR vaenta".)
          ; Nollställ antalet.

          LDA #0       ; A = 0.
          STA antal    ; antal = A.

vaenta_2:

          LDA antal    ; A = antal.
          CMP #10      ; Är det 10?
          BNE inte_10  ;   Nej: Hoppa till "inte_10".

          ; Antalet är 10.

          JMP slut     ; Hoppa till "slut".

inte_10:

          ; Antalet är inte 10.

          INC antal    ; antal = antal + 1.
          JMP vaenta_2 ; Titta igen.

slut:
          RTS          ; Hoppa tillbaka.
Pic 16:

Kod: Markera allt

vaenta:

          ; (Man hoppar hit med "call vaenta".)
          ; Nollställ antalet.

          movlw   d'0'        ; w = 0.
          movwf   antal       ; antal = w.

vaenta_2:

          movlw   d'10'       ; w = 10.
          subwf   antal,w     ; w = antal - w.
          btfss   STATUS,Z    ; Blev svaret 0? (Är z-biten 1?)
          goto    inte_10     ;   z = 0: Nej. Hoppa till "inte 10".

          ; Z-biten blev 1. Då är antalet 10 nu.

          goto slut           ; Hoppa till "slut".

inte_10:

          ; Antalet är inte 10.

          incf    antal,f     ; antal = antal + 1.
          goto    vaenta_2    ; Titta igen.

slut:

          return              ; Hoppa tillbaka.
Databladet till en pic-processor är ett bra ställe att läsa mer om instruktionerna på. Till exempel 16 F 877 A, för att ta en i högen.
Det finns en sida som heter http://www.piclist.com. Om du går in på "source code library" så finns det många program och rutiner att titta på. En del är ganska lätta att förstå (efter en stund), och en del är svårare.
Användarvisningsbild
GrodanB
Inlägg: 245
Blev medlem: 11 februari 2006, 16:46:25
Ort: Göteborg
Kontakt:

Inlägg av GrodanB »

TomasL skrev:Assembler är inte ett språk.
Assembler är en bunt mneonics, dvs förkortningar av maskinkod.
Assembler kan aldrig och blir aldrig ett språk.

Ett språk har en syntax, vilket assembler saknar.
Enkelt, eller hur.

Mneonics översätts till maskinspråk av en assemblator, varje mneonic har en direkt översättning till maskinkod, därför ser det olika ut för olika processorer.

Ett språk kan, i princip porteras till valfri processor, om det finns en kompilator.
Assembler kan inte porteras.
Då är vi 2 med samma defninition...

Sen förvånades jag över att man kallar C för en familj... C är 1 språk. UR C har det kommit rena utvecklingar (C++ är väl den tydligaste) sen kommit liknande med s.k. C syntax tex. Java.

Jag hoppas inte Zmod blir avskräckt av detta... men det är inte speciellt svårt att hoppa mellan olika CPUer... har man bara kommit in i "tänket" så är det mer eller mindre bara att komma på vad det kallas i denna varianten... I alla fall när det gäller enklare 8,16 bitars CPUer... bland 32 bitars varianterna finns det lite mer lurigheter som man behöver knäcka ibland... men de behöver vi inte ta upp här...

Man kan säga att ju närmare maskinkod du kommer ju mindre portningsmöjlighet finns.

Så tex. Java är väldigt portningsbart. I princip behövs ingen portning alls.., Om man gjort rätt och utnyttjat java som det var tänkt från början...

C kräver nästan alltid lite omskrivning även om man skriver ANSI C och försöker använda minimalt med CPU specifika delar...

Assembler kräver alltid en större insats... Inte ens mellan PIC:ar är det helt utan portning... (Väldigt liten om man följer Sodjans rekommendationer) och då har microchip lite det som en "sellingpoint" att de är ovanligt kodkompatibla... Men mellan helt olika CPU familjer är det oftas ren omskriving som behövs. (Se BJ utmärkta exempel)

Jag kodar en hel del microkod på mitt jobb (dvs. jag skriver kod som blir "instruktioner"). Där finns inte ordet portning och det är till och med rekommenderat att om man hittar en bugg eller om man skall lägga till funtionallitet inte fortsätter på befintlig kod utan börjar om :). (rekommedation från chiptillverkaren alltså). Fast min stolhet gör att man sällan gör så... men ibland hade det definitiv varit snabbaste vägen att gå.
Skriv svar