Elektroniker1 wrote:
> Und wenn ein Kollege fragt, ob er mal meine Funktionen zum LM75 haben
> kann brauche ich die nicht mühsam rauszukopieren, sondern ich geb ihm
> einfach das File und er legt es in seinem Projektordner ab und schliesst
> es dann in seinem mainprog ein.
Wenn aber der Kollege etwas erfahrener ist, wird er Dich sofort fragen,
was er nur mit dem h-File soll, er braucht ja auch das dazugehörende
c-File oder die Lib.
Er erwartet nämlich, daß in dem h-File kein Code steht, sondern nur die
zu exportierenden Funktions- und Variablendeklarationen.
Schau Dir mal die standard h-Files Deines Compilers an, da steht auch
kein Code drin.
In C ist es üblich, daß ein Programm aus mehreren c-Files besteht, die
separat zu Objectfiles compiliert werden und die dann erst zusammen
gelinkt werden.
Das hat bei großen Projekten den Vorteil, daß nicht jedesmal sämtliche
Files neu compiliert werden müssen und das es keine Seiteneffekte
zwischen den Objekten gibt (Konflikte zwischen Defines, Variablen-,
Funktionsnamen).
> Man kann nicht 2 Dateien anhängen, und da ich davon ausging, dass der
> fehler bei den I2C Funktionen war, hab ich mich entschlossen, dieses
> File anzuhängen.
Dann macht man ein ZIP daraus und postet dieses.
> Jetzt zum Fehler:
> Als ich das List-File genauer unter die Lupe genommen hab, hab ich
> schliesslich gemerkt, dass die I2C-Befehle das Tris-Register verändert
> haben, genau so wie Bernd gesagt hat. Ich habe also bei jeder
> SPI-Funktion das TrisC-Register neu iniatialisiert und schon war der
> Fehler behoben.
Behoben ist er nicht, Du hast nur einen Workaround dazu gebastelt.
Die korrekte Methode ist, daß ein Schattenregister im RAM angelegt wird
und jede Funktion, die ein Tris-Bit ändern will, dieses Schattenregister
ändert und ausgibt. Damit bleiben alle anderen Bits ungeändert, wie es
sich gehört.
Wenn Du den Sourcetext zu dieser fehlerhaften Lib hast, dann solltest Du
ihn entsprechend korrigieren.
Ansonsten kann es passieren, wenn das Projekt wächst, daß der Workaround
irgendwann nicht mehr funktioniert oder Du vor lauter Workarounds den
Überblick verlierst.
Du hast ja noch 2 weitere PORTC-Pins, was ist wenn Du die auch noch
brauchst?
Oder wenn andere Ports auch geteilt werden müssen?
Besser ist es also, einen einmal erkannten Fehler gleich zu berichtigen.
Peter