In jeder halbwegs ordentlichen IDE kannst mit gedrückt gehaltener Strg Taste auf PCMSK klicken, dann siehst du, wie es definiert ist. Es ist ein Zeiger mit der Adresse des Registers.
Und PCINT0 ist schlicht eine Zahl und zwar die Nummer dieses Bits.
Direkter als
PCMSK |= (1<<PCINT0);
sowie
PCMSK &= ~(1<<PCINT0);
geht es in C nicht, weil die Programmiersprache keine gesonderte Syntax für Register hat und auch nicht für dem Zugriff auf einzelne Bits. Aber keine Sorge, der Compiler ist so schlau, diese Zeile in einen einzigen CPU Befehl umzusetzen, auch wenn sie eher nach einer Kombo aus read+modify+write back aussieht.
Ich habe in meiner IDE keine vorgegebene io.h für den Tiny5.
Dann sorg' dafür, dass du eine hast. Der Tiny5 ist dermaßen übersichtlich, das man die zur Not sogar von Hand verfassen könnte. Aber warum sollte man? Gibt's ja schließlich fix und fertig von MC.
Musst du halt die IDE wechseln. Welche ist es den derzeit?
Ja klar. Deswegen führt nur die Beantwortung meiner Frage, welche IDE dee TO eigentlich verwendet (und damit der Frage, welche Toolchain und damit wiederum welche Header).
Genau diese eine zentrale Frage wurde vom TO allerdings negativ bewertet.
Sprich: Das ist ganz offensichtlich ein Troll, der sich darum sorgt, dass sein Troll-Thread zu kurz wird.
Mir fehlt da der Pointer. Aber ich bin ganz sicher, die Zeilen korrekt aus den Headern heraus kopiert zu haben. Und war da nicht auch was mit volatile?
Der Tiny5 ist dermaßen
übersichtlich, das man die zur Not sogar von Hand verfassen könnte.
Das kann man wohl sagen. Das "Programm" ist so ungefähr 20 Zeilen lang. Im Grunde ist es ein Luxus-Timer; ist auch nicht mein Ding - ich soll es nur kompilieren. Kompliliert sind es 470 Byte, also eher übersichtlich.
Genau diese eine zentrale Frage wurde vom TO allerdings negativ
bewertet.
Ich habe gar nichts bewertet.
Hintergrund: Ich habe schon den ganzen Tag verplempert, um das Miniprogramm zu übersetzen. War schon kurz davor, das gleich in Assembler neu zu schreiben. :-(
Beim Atmel Studio 4.19 habe ich wohl vergessen wie es geht, außerdem ist der Tiny5 grau in der Liste. Bei avr-gcc (avr8-gnu-toolchain 3.7.x) erhalte ich die Meldung, daß beim Tiny5 nur Assembler unterstützt wird. Ebenso beim WinAVR. Dann habe ich mir den GCC 10.3 heruntergeladen, aber in der 1000+x-seitigen Doku habe ich nur -mmcu=avrtiny gefunden, der aber nicht laufen will.
VS mit PlatformIO habe ich mir auch heruntergeladen, aber das ist auch nichts für mal eben schnell.
Nun, die avr8-gnu-toolchain habe ich von Microchip heruntergeladen. Das war schon die neueste Version (von 2022).
Den gcc habe ich direkt von der Projektwebsite. Da habe ich extra den älteren 10.3 gewählt, weil es doch angeblich mit den neueren irgenwelche Probleme gab.
Den gcc habe ich direkt von der Projektwebsite. Da habe ich extra den
älteren 10.3 gewählt, weil es doch angeblich mit den neueren irgenwelche
Probleme gab.
Sagt mir das, es wird der gcc in Version 5.4.0 benutzt? Dann wäre das
auch nicht "modern".
Das sagt dir, dass das Headerfile für den ATtiny5 bereits dort vorhanden ist und nur auf die passende Einbindung wartet.
Bevorzugt per ›io.h‹ und passendem Target.
Habs eben probiert mit 5.4.0 (= AS7) und 7.3.0, geht beides:
int main(void)
{
PCMSK |= (1<<PCINT0);
28: 80 9a sbi 0x10, 0 ; 16
Das ist aber vermutlich 7.3.0 output, oder?
Der alte 5.4.0 erzeugt zumindest bei mir hier nämlich noch einen ganzen Sack mehr. Egal in welcher Optimierungsstufe (O0|O1|O2|Os).
1
#include<avr/io.h>
2
// avr-gcc -Wall -Wextra -pedantic -mmcu=attiny5 -os -o x x.c && avr-objdump -d x > xs.lst
Also müßte der funktionieren, aber das tut er nicht. Es kommt die
Meldung, daß nur Assembler unterstützt wird für -mmcu=attiny5.
Sehr seltsam. Diese Meldung sollte nur kommen für -mmcu= at90s1200, attiny11, attiny12, attiny15 oder attiny28. Alle anderen Devices sollten entweder funktionieren oder komplett abgelehnt werden (specs File nicht gefunden etc.)
Und wo man auf jeden Fall drauf achten sollte, ist dass LDS und STS eine 16-Bit Codierung haben. Ansonsten: Binutils Bug.
Builds for Windows findet man bei Microchip, Zak Kemble oder
Schön wär`s. Der Compiler Explorer hat gemeckert....
Hab deine Option per Copy&Paste eingefügt.
Hätte ich mir von avr-gcc auch gewünscht.
Das Verrückte ist, hab gerade in die bash history geschaut. Weiter oben hatte ich es erst einmal richtig und im weiteren Verlauf mit verschiedenen Optimierungen dann zielsicher durch editieren versaut. ;-)