Raspberry Pi projekt, ska jag lära mig C eller Python?

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Icecap
Inlägg: 26199
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av Icecap »

Sedan är Linux inte ett RTOS så all snack om "realtidsprogram" är lite skrattretande, precis som att ha samma snack om Windows.

Men om det menas ett program som kan hämta in input från fysiska enheter och reagera på dessa är det fullt möjligt, vara sig det rör sig om Linus eller Windows eller andra OS.

Till pajen finns det ju tillägg som slår på serieporten, andra startar SPI funktionen osv. På en Windows-dator kan man, i programmet, t.ex. öppna en fil med skriv & läs behöringhet och sätta filnamnet till t.ex. "COM1", då plötsligt har man kontakt med den seriella porten COM1 (om den finns alltså).

Om det är lika på Linux vet jag inte (än) men det kan inte vara speciellt svårt.

Under Windows kan man starta en timer-funktion och den kan sedan fungera som en interrupt i programmet och det samma lär nog gälla under Linux, alltså kan den "timer-interrupt" rutin sköta vissa saker.

Så det är inte så svårt...
Senast redigerad av Icecap 14 juli 2013, 20:46:17, redigerad totalt 1 gång.
0xDEADBEEF
Inlägg: 17
Blev medlem: 20 oktober 2012, 14:55:05
Ort: Jönköping

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av 0xDEADBEEF »

Jag vet inte om det tillför så mycket och kanske lite off topic... men lite allmän Linux-programmering är ju alltid skoj :D
*nix system har den fantastiska filosofin "everything is a file", och det stämmer *nästan* i Linux. Nätverksinterface är ingen "riktig" fil i linux.

Kort och gott, vill du läsa från serieporten, läs från filen /dev/ttyXXX0.
Skriva till parallellporten? Skriv till filen /dev/lp0.
Skriva till spi-bussen? Skriv till filen /dev/spi0.0.
osv.

Timers och liknande funktioner är specade i POSIX-standarden och är bara att använda :tumupp:

Vad gäller Linux och realtid så har vanilla kerneln inte jättebra realtidsegenskaper. Däremot finns preemt_rt ( https://rt.wiki.kernel.org/index.php/Main_Page ) som byter schedulerare, gör större delar av koden preemptive, gör interrupt schedulerbara osv.
Stor skillnad blir det, men man sätter det kanske inte i något med stenhårda realtidskrav :roll:
Radiohead
Inlägg: 445
Blev medlem: 18 mars 2006, 17:11:02

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av Radiohead »

Oj, det var väldigt många bra svar. Hoppas frågan inte postats tidigare, hittade ingen tråd iaf. Lutar åt python, då det verkar likna matlab en del i syntaxen.

Det jag vill göra är en robot som åker runt och samlar in data. Svarstider för reglerloopen som styr navigationen är alltså inte kritiskt. En sekund är nog ok, en tiondels hade varit trevligt. Var medveten om att "realtid" antagligen var ett kontroversiellt begrepp i sammanhanget!

Frågan dök upp om interrupts, och timers nämndes. Vad jag minns från mikrodatorprogrammering så ville man ofta göra så att när en pinne på en ingångsport blev hög så skulle en vis programsnutt köras. Kan man göra det i Python?
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43191
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av sodjan »

Det räcker inte med vad som kan göras i Python eller inte,
interrupt är beroende av hela kedjan från hårdvara genom
operativsystem och programmiljön (Python interpretatorn)
fram till applikationen (din Python applikation).
Nerre
Inlägg: 26750
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av Nerre »

Ja men det gäller ju oavsett om man kör C eller Python på samma plattform, så frågan kvarstår ju då: Om plattformen i övrigt stödjer interrupt, funkar det med Pyhton?
Nerre
Inlägg: 26750
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av Nerre »

Ja jag hittade också den här sidan som indikerar att det inte riktigt fungerar lika flexibelt som i t.ex C.

http://docs.python.org/2/library/signal.html
void
Inlägg: 119
Blev medlem: 8 juli 2007, 11:06:50
Ort: Enköping

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av void »

Snart kommer PyPy för PI, vilket ger lite snabbare exekvering (typ 5-10 ggr): http://www.raspberrypi.org/archives/3881
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43191
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av sodjan »

> att det inte riktigt fungerar lika flexibelt som i t.ex C.

Hur gör men det i C på RaspPI då ?
Eller i en generell Linux miljö över huvudtaget?
Se t.ex : http://www.cdf.toronto.edu/~csc469h/win ... /t3/t3.pdf
Notera dels komlexiteten i sig ("device drives", "kernel programming" o.s.v), dels
den nära kopplingen till den aktuella hårdvaruplattformen (Inetl X86 i detta fall).

Problemet är ju att interrupt så som vi känner igen det från enklare
miljöer som AVR/PIC och liknande ju är något helt annat än vad man
kan åstakomma när man har ett helt OS som ligger mellan hårdvaran
och applikationen. Som jag skrev tidigare så krävs det att det finns
definierad funktionallitet "hela vägen" så att säga. Detta är en av
de saker som är mer utvecklad i OS som är anpassade för "realtids"
applikationer och liknande.

Att göra det lika (rellativt) enkelt som på en AVR/PIC kan man i princip glömma.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43191
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av sodjan »

> vilket ger lite snabbare exekvering (typ 5-10 ggr)

Ja, det konfirmerar ju vad jag sa om skillnaden mellan Python
(och liknande) och de mer traditionella språken/verktygen.
Det gör ju inte Python oanvändbart eller ointressant, men
kanske inte till just det som diskuteras i denna tråd.
0xDEADBEEF
Inlägg: 17
Blev medlem: 20 oktober 2012, 14:55:05
Ort: Jönköping

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av 0xDEADBEEF »

>Hur gör men det i C på RaspPI då ?
>Eller i en generell Linux miljö över huvudtaget?

Som nämnts innan; everything is a file :D
Ta en titt i /sys/class/gpio, där finns möjlighet att exportera GPIOs. (exempelvis gpio 33).
echo 33 > /sys/class/gpio/export
Sätta direction:
echo in > /sys/class/gpio/gpio33/direction
Läsa värde:
cat /sys/class/gpio/gpio33/value

Där finns även attributet "edge" som man kan sätta för att trigga på falling eller rising edge.
I python/C/whatever öppnar man sedan /sys/class/gpio/gpio33/value och använder systemanropen epoll/select för att trigga på när värdet ändras.
Det är med all säkerhet så pythonbiblioteket GPIO gör.

I schemat/datablad för processorn benämns säkert GPIOs som t.ex. GPIO1_1. Altså andra GPIOn på andra banken. Linuxkerneln använder bara ett löpnummer för alla GPIOs, och eftersom processorn är 32bitar (alla banker har 32 GPIOs per bank) så blir löpnummret 32 (bank 1) + 1 = 33.
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43191
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av sodjan »

> ...och använder systemanropen epoll/select för att trigga på när värdet ändras.

OK. Inte riktigt vad jag kallar "interrupt". :-) Där så ligger man ju
låst i systemanropet epoll_wait() tills något händer. För att det
ska vara någon rejäl mening med det behöver man mekaniskmer
där man registrerar en ISR som sedan av systemet anropas då
interruptet inträffar och avbrytar pågående aktiviteter.

Så som sagt, en läsning där man ligger låst i väntan på att något
ska hända har inte mycket med det som normalt avses med
"interrupt" att göra.

Jag tänker mig något mer i stil med de AST ("Asynchronous System Trap")
som beskriv här: http://en.wikipedia.org/wiki/Asynchronous_System_Trap.
Asynchronous system traps (ASTs) are interrupts that occur asynchronously (out of sequence)
with respect to the process's execution. ASTs are activated asynchronously to the mainline code
in response to an event, usually either as a timer expiration or an I/O completion. An AST provides
a transfer of control to a user-specified procedure that handles the event. For example, you can use
ASTs to signal a program to execute a routine whenever a certain condition occurs.
Alltså precis så som ett interrupt brukar definieras.
Radiohead
Inlägg: 445
Blev medlem: 18 mars 2006, 17:11:02

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av Radiohead »

Sodjan, menar du att C är mer rätt än python för min tillämpning? Om man bortser från interrupts då som verkar vara lika knepigt i både c och python.

Likheten med matlab lockar mig till python. Det finns också mycket färdiga rutiner på nätet för kommunikation med moduler. Det är antagligen lättare med python om man behöver lägga in nån matrisoperation nånstans också, eller annan mer avancerad matematisk operation.

C är som jag ser det bara intressant då det är potentiellt snabbare än python. Och, att det är bra om man vill gå vidare med arduino eller avr senare.
danielr112
Inlägg: 8054
Blev medlem: 18 januari 2009, 00:48:24
Ort: Alvesta, Småland

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av danielr112 »

Om du inte ska köra grymt tidskritiska saker kör det språket som är lättast att hitta det du söker
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43191
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Raspberry Pi projekt, ska jag lära mig C eller Python?

Inlägg av sodjan »

> Sodjan, menar du att C är mer rätt än python för min tillämpning?

Nej, jag har inte en susning om vad som är rätt i just ditt fall.
Det jag menar är att det kan spela roll vad man väljer.

Håller med danielr112, kör det som fungerar för det du vill göra.
Skriv svar