Ja genau Silabs, euch mein ich!
Vor 2 Wochen hats noch kompiliert, Dann kam eine Update und jetzt
fabriziert der so einen Mist:
"i: undefined identifier"
"ea: undefined identifier"
Man beachte wo die beiden Variablen deklariert werden!
Testen die ihren Scheiß nicht mal im Ansatz bevor sie das auf die Leute
loslassen? Ich find das hochgradig unprofessionell!
Das ist auch der Grund warum ich derartigem
Konfigurator-GUI-Codegenerierungs-Hokuspokus so ablehnend gegenüber
stehe! Da will ich eigentlich ganz locker entspannt was ganz anderes
machen und plötzlich merk ich daß das blöde Silabs-Projekt gar nicht
mehr kompiliert weil Silabs scheinbar irgendwann letzte Woche ein
vollkommen ungetestetes defektes Update an alle Nutzer dieser
verdreckten IDE rausgehauen hat! Laut Versionskontrolle bestand die
obige Funktion letzte Woche noch aus nur zwei Zeilen ohne den ganzen
Klimbim außen rum!
Das ist das einzige Projekt das ich noch habe das noch von der
Hersteller-IDE erzeugt wurde und von der verwaltet wird, alles andere
mach ich mit schriftlich hingeschriebener Konfiguration und einfachen
Makefiles und die funktionieren bei jedem Wetter! Und genau dieses eine
das noch am Tropf der Hersteller-IDE hängt fliegt mir um die Ohren!
Das soll Euch allen als Mahnmal dienen!
Elender IDE-Rotz! Wem soll mit so einem Scheiß denn überhaupt geholfen
sein? Das macht doch mehr kaputt als es nützt!
</rant>
Hans schrieb:> Weiß nicht warum jeder meint sein Gemecker jedem aufdrücken zu müssen..> immer dieses rumgeheule---
Ich finde, dass kann man durchaus auch einfach mal als Erfahrungsbericht
lesen und dann hat es auch seinen Wert (der über Bernds Frustloslassen
hinausgeht).
Torsten R. schrieb:> Ich finde, dass kann man durchaus auch einfach mal als Erfahrungsbericht> lesen und dann hat es auch seinen Wert (der über Bernds Frustloslassen> hinausgeht).
Das schon. Aber Bernd beginnt seinen Beitrag mit den Worten
> Ja genau Silabs, euch mein ich!
Wörtlich genommen heißt das, er will gar nicht mit uns diskutieren,
sondern mit Silabs (bzw. Silicon Labs), von denen wohl kaum einer hier
in einem deutschsprachigen Forum aktiv sein wird.
Deswegenm schrieb ich: Falsche Adresse.
Aber in Wahrheit will er wohl das Forum einfach einfach nur nutzen, um
seinen Frust abzulassen
> </rant>
und poltert dann mit Wörtern wie Mist, Scheiß, Hokuspokus, blöde,
verdreckten, Klimbim, Rotz usw. herum.
Natürlich kann man auch hier im Forum über fehlerhafte kommerzielle
Software diskutieren, aber meiner Meinung nach sollte man dabei erst
einmal den Hersteller der Software zu Wort kommen lassen, und die darauf
folgende Diskussion sollte trotz allen Unmuts sachlich bleiben und nicht
von Emotionen dominiert werden.
Am Ende stellt sich vielleicht heraus, das Bernd die Release-Notes nicht
gelesen hat, in denen dieses Problem und dessen Lösung bereits vorweg
genommen wurde ;-)
Edit:
Bernd K. schrieb:> Habs mittlerweile auch im Silabs-Forum in der entsprechenden Rubrik> gemeldet, die wissen also jetzt Bescheid:> https://www.silabs.com/community/software/simplicity-studio/forum.topic.html/efm8bb1_generatedco-HttE
Ok, aber warum war das nicht dein erster Schritt?
Yalu X. schrieb:> und poltert dann mit Wörtern wie Mist, Scheiß, Hokuspokus, blöde,> verdreckten, Klimbim, Rotz usw. herum.
menschlich verständlich, ich gehe normalerweise davon aus das sowas
getestet sein sollte vor Veröffentlichung, erlebe es oft genug aber
anders.
> ... aber meiner Meinung nach sollte man dabei erst> einmal den Hersteller der Software zu Wort kommen lassen
in der Art, "Oh sie sind der Erste der diesen Fehler meldet" während das
Internet schon voll ist mit Beschwerden
Yalu X. schrieb:> Aber in Wahrheit will er wohl das Forum einfach einfach nur nutzen
Die drittletzte Zeile weist den Grund meines Postings aus. In Zukunft
kann man darauf verweisen und sagen: "Seht genau hin Kinder, so kanns
gehen!"
Ich denke, es ist besser für den TO, vor Inbetriebnahme des Mundwerks
das Gehirn einzuschalten:
Wie wäre es denn, erst mal die Variable zu initialisieren, bevor man sie
einer anderen zuweist?
IE_EA = 0; erst mal initialisieren
ea = IE_EA; dann eine andere Variable "befüllen"
WDTCN = 0xDE;
WDTCN = 0xAD;
IE_EA = ea;
RumpelHeinzchen schrieb:> Ich denke, es ist besser für den TO, vor Inbetriebnahme des Mundwerks> das Gehirn einzuschalten:
Wenn man keine Ahnung hat, dann sollte man einfach mal die Finger still
halten. IE_EA ist keine Variable, das ist ein Register.
1
// Save current interrupt state and disable interrupts
2⁵ schrieb:> RumpelHeinzchen schrieb:>> Ich denke, es ist besser für den TO, vor Inbetriebnahme des Mundwerks>> das Gehirn einzuschalten:>> Wenn man keine Ahnung hat, dann sollte man einfach mal die Finger still> halten.
Eben!
>IE_EA ist keine Variable, das ist ein Register.
Und?! Sag das dem TO. Ich habe lediglich die Reihenfolge der Befehle
richtig gestellt.
>>
1
>// Save current interrupt state and disable interrupts
Joachim B. schrieb:>> ... aber meiner Meinung nach sollte man dabei erst>> einmal den Hersteller der Software zu Wort kommen lassen>> in der Art, "Oh sie sind der Erste der diesen Fehler meldet" während das> Internet schon voll ist mit Beschwerden
Das ist eben das Problem. "Das Internet" ist voll davon, aber es
demjenigen mitzuteilen, der das Problem tatsächlich beheben könnte,
daran denken die wenigsten.
Ist es die Aufgabe des Herstellers, "das Internet" in seiner Gänze
abzuklappern, um rauszufinden, ob jemand einen Bug gefunden hat?
RumpelHeinzchen schrieb:> Und?! Sag das dem TO. Ich habe lediglich die Reihenfolge der Befehle> richtig gestellt.RumpelHeinzchen schrieb:> Wie wäre es denn, erst mal die Variable zu initialisieren, bevor man sie> einer anderen zuweist?>> IE_EA = 0; erst mal initialisieren> ea = IE_EA; dann eine andere Variable "befüllen"
qed.
Rolf M. schrieb:> Ist es die Aufgabe des Herstellers, "das Internet" in seiner Gänze> abzuklappern, um rauszufinden, ob jemand einen Bug gefunden hat?
nö, natürlich nicht, aber manche Fehler lassen sich durchaus vom
Hersteller in wenigen Tests finden und mal unter uns, ich glauber den
Shice nicht mehr "Sie sind ja der Erste der das meldet"
Wie kann das sein das man auf Webseitenformularen 40 Zeichen
Eingabefelder hat aber der Ettikettendrucker nach 20 Zeichen
abschneidet, das sollte doch gemerkt werden, oder das im Webformular 3
Adresszeilen sind aber nur 2 gedruckt werden.
Bestes Beispiel TomTom Navi Software auf winCE eine rechts/links Abbiege
Kombi gibt als Sprachausgabe nur links abbiegen aus, was sofort mit
bitte wenden weitergeführt wird. Derselbe Bug war bei der TomTom
Hardware für 500,- includet und das soll keiner gemerkt haben?
Bernd K. schrieb:> Testen die ihren Scheiß nicht mal im Ansatz bevor sie das auf die Leute> loslassen? Ich find das hochgradig unprofessionell!
Silabe IDE nutzt für die 8051ger den Keil C Compiler, und ich bin
ehrlich verwundert das es Versionen gegeben hat die Deinen geposteten C
Source geschluckt hätten. Das war definitiv ein Bug.
Leider ist Keil einer der besseren Compiler für die 8051 Architektur...
Jim M. schrieb:> Leider ist Keil einer der besseren Compiler für die 8051 Architektur...
Meine Begeisterung für diesen Compiler hält sich arg in Grenzen. Sobald
zum Beispiel 32 bit integer ins Spiel kommen wirft der Optimizer das
Handtuch. Da wird dann schon mal ein >>8 als acht einzelne Bitschifts
ausgeführt anstatt einfach die 3 unteren Bytes zu nehmen oder Division
durch ne konstante Zweierpotenz wird nicht als solche erkannt und solche
Scherze. Da muß man ständig ein Auge auf den erzeugten Code haben. Von
dem nostalgischen C89 Feeling zu dem er einem verhilft weil er seit den
90ern nicht mehr weiterentwickelt wurde und anscheinend nur noch als
untote Mumie mitgeschleift wird will ich gar nicht erst anfangen.
Jim M. schrieb:> und ich bin> ehrlich verwundert das es Versionen gegeben hat die Deinen geposteten C> Source geschluckt hätten.
Kein Compiler der Welt hätte das geschluckt.
Der Code (das ist generierter Code von der IDE!) ist klammheimlich
mutiert nachdem die IDE Updates gezogen hat! Ich hab noch den alten zum
Vergleich.
Letzte Woche sah der noch so aus:
Ich hätte eigentlich gedacht, den Codewizzard benutzt man nur einmal
beim Start eines Projektes. Und heraus kommt dann ganz normaler C-Code,
den man in sein Projekt einbindet.
Best practice ist, Variablen immer erst dann zu definieren, wenn sie
gebraucht werden, also:
Peter D. schrieb:> Ich hätte eigentlich gedacht, den Codewizzard benutzt man nur einmal> beim Start eines Projektes. Und heraus kommt dann ganz normaler C-Code,> den man in sein Projekt einbindet.
Die haben sich das als two-way-tool gedacht, es ist permanent aktiv, und
es betrifft auch nur 2 oder 3 Dateien die man normalerweise überhaupt
nicht anrührt.
> Best practice ist, Variablen immer erst dann zu definieren, wenn sie> gebraucht werden, also: for (uint32_t i = 0; i < (2 * 3062500UL) /> (10000 * 3); i++) {> NOP();> }
Ja, wem sagst Du das? Wir haben es hier leider mit dem Keil C51 Compiler
zu tun, das ist ein versteinertes Relikt aus den 80er Jahren, der
spricht nur C89. Variablendeklarationen sind nur am Anfang erlaubt bevor
jeglicher Code ausgeführt wird!
Bernd K. schrieb:> Variablendeklarationen sind nur am Anfang erlaubt bevor> jeglicher Code ausgeführt wird!
Genau wie im Linux Kernel Source Code... Hurra!
Von wegen Code-Generatoren:
Simulink generiert Code welcher Typen wie "int32_T" benutzt. Dieser ist
für Cortex-M ein Alias auf "int". Natürlich möchte man im eigenen Code
die Standard-Typen wie "int32_t" verwenden. Wenn man jetzt aber
sinngemäß schreibt:
1
int32_TSimulinkVariable;
2
int32_t*variable=&SimulinkVariable;
Gibt's einen Compiler-Fehler. Weil int32_t ein "long" ist, welcher zwar
auch 32bit groß ist, aber trotzdem ein anderer Typ und damit nicht
kompatibel. Warum verwendet Simulink nicht einfach die Standard-Typen
wie "int32_t"? Warum das Rad in Form von "int32_T" eckig neu erfinden?
Danke Simulink-Ingenieure!
Dr. Sommer schrieb:> Simulink generiert Code welcher Typen wie "int32_T" benutzt. Dieser ist> für Cortex-M ein Alias auf "int".
Es geht noch besser:
GigaDevice (großer chinesischer Hersteller für Flashspeicher und auch
für ARM Cortex MCUs) hat folgende Perle tief drin in seinen Headern
versteckt:
1
typedefenum{FALSE=0,TRUE=!FALSE}bool;
Copyright 2017! Weiter oben haben sie stdint.h includiert aber für
stdbool.h hats anscheinend nicht mehr gereicht. Da frag ich mich echt
was die im Reich der Mitte für Kräuter rauchen. Uns das beste: Es wird
nicht ein einziges mal referenziert irgendwo, es steht nur da rum und
sorgt für Ärger. Man kann es auskommentieren und all deren mitgelieferte
"Treiber"-Module kompilieren immer noch.
Bernd K. schrieb:> Da frag ich mich echt> was die im Reich der Mitte für Kräuter rauchen.
Ha! Das frage ich mich auch. Ich darf mich auch gerade ausführlich mit
chinesischem Code herumschlagen. Der ist auch enorm hässlich. Über die
ganzen Verletzungen des C-Standards muss man schon geflissentlich
hinweglesen, den Spaghetti-Code akzeptieren und die fehlende
Fehlerbehandlung abnicken. Man lernt, sich über die kleinen Dinge im
Leben zu freuen (Nicht-chinesische Kommentare, sinnvolle Funktionsnamen,
Module welche überhaupt als Source vorliegen, Bereichsprüfung bei
Argumenten). Der Code von Microchip (Indien) ist ähnlich toll.
Nochmal von wegen Simulink: Das generiert einen struct, welches den
internen Zustand des Modells repräsentiert. Je nachdem, ob das Modell
ein Gedächtnis hat oder nicht (z.B Integrator) muss man ein zusätzliches
"work"-Struct anlegen und einen Zeiger darauf initialisieren. Natürlich
kann der C(++)-Code nicht automatisch feststellen ob das "work"-struct
existiert oder nicht (nichtmal mit SFINAE); wenn man das Modell jetzt
abändert dass es kein Gedächtnis mehr braucht gibts einen
Compiler-Fehler, im umgekehrten Fall Null-Zeiger-Dereferenzierung, die
natürlich besonders schlecht zu finden ist weil auf Cortex-M die
0-Adresse gültig ist.
Bernd K. schrieb:> Wir haben es hier leider mit dem Keil C51 Compiler> zu tun, das ist ein versteinertes Relikt aus den 80er Jahren, der> spricht nur C89.
Der Herr Keil hat damals ein hervorragendes Stück Arbeit geliefert. Es
war der Startschuß, auch MCs in C zu programmieren. Es hat mich schon
etwas gewurmt, als ich das erste Projekt von Assembler auf C umgestellt
hatte, daß es kleiner und schneller geworden ist.
Aber der Herr Keil ist vermutlich schon lange in Rente und keiner hat
sich gefunden, der die Entwicklung weiter führt.
Dr. Sommer schrieb:> Warum das Rad in Form von "int32_T" eckig neu erfinden?
Ich vermute, weil es eben immer noch zu viele Compiler gibt, die bei C89
stehen geblieben sind und es selbst 30(!) Jahre später nicht geschafft
haben, einen simplen Header mit ein paar Typedefs mitzuliefern.
Oder es liegt daran, dass so Dinge wie Autosar C89 vorschreiben.
Silabs hat Kritik aber voll verdient - das Simplicity Studio macht bei
mir auch regelmäßig Faxen.
Nicht wegen geändertem Code, sondern einfach weil es die
Projekteinstellungen "vergisst" und ich alles nochmal neu einstellen
darf. Und es packt oft Sachen ins Projekt mit rein die ich überhaupt
nicht haben will - Treiber für irgendwelche Chips die auf den
Entwicklungsboards drauf sind und sowas - wirft dann natürlich Fehler
wenn das nicht konfiguriert ist.
Passiert oft wenn man eben diese GUI Konfiguratoren bemüht (für den
Wireless Kram mit seinen 1000 Optionen ist das leider ohne recht
aufwändig) oder ich das Projekt auf einen anderen Rechner übertrage...
oder nach größeren Updates.
Yalu X. schrieb:> Torsten R. schrieb:>> Ich finde, dass kann man durchaus auch einfach mal als Erfahrungsbericht>> lesen und dann hat es auch seinen Wert (der über Bernds Frustloslassen>> hinausgeht).>> Das schon. Aber Bernd beginnt seinen Beitrag mit den Worten>>> Ja genau Silabs, euch mein ich!
Ich erkläre dir das mal allgemein, nicht anhand von Silabs. Leider ist
es heute so, dass viele Firmen nur noch dann reagieren, wenn man deren
dreckige Wäsche öffentlich wäscht. Nur wenn eine Firma öffentlich
Scheiße aussieht kommt man dort manchmal auf die Idee etwas zu tun.
Danke ihr verfickten BWLer ...
Praktisches Beispiel: Du hast ein Problem mit DHL (wer hat das nicht)?
Vergiß den telefonischen oder E-Mail "Support". Verarschen kann man sich
alleine. Treibt man statt dessen zuerst die Sau durch's Internet Dorf,
besonders durch soziale Medien, dann nimmt sich das "DHL Social Media
Team" des Problems an.
Wenn man solche Erfahrungen ein paar mal gemacht hat, dann lernt man
daraus und es wird zur Routine. Zuerst die Firma öffentlich schlecht
machen und anprangern, dann auf Support hoffen wird zum normalen
Vorgehen. Man ist ja lernfähig. Die Firmen wollen das so, die Firmen
bekommen es. Willkommen im Internet.
SummSumm schrieb:> Silabs hat Kritik aber voll verdient - das Simplicity Studio macht> bei> mir auch regelmäßig Faxen.
Wir brauchen das nur zum Setzen der CP2102-Config, und dafür ist es so
RICHTIG übertrieben. Weil die neueren Chips (CP2102N) nur noch davon
unterstützt werden, ist SILAB in der Beliebtheit hier nicht gerade
gestiegen.
Was die Codegeneratoren und Code vom Hersteller angeht: Ich persönlich
lasse (für Bastelprojekte) die Finger davon. Gebranntes Kind scheut das
Feuer und so. Bei mir wars die Peripheral-Lib von Microchip. Neue
Version der IDE -> Millionen Fehler (Perihperal Lib depracted oder so).
Bernd K. schrieb:> Scheiß ... Hokuspokus ... blöde Silabs-Projekt ... ungetestetes defektes> Update ... verdreckten IDE ... Elender IDE-Rotz! ... Scheiß> </rant>
Oh das Gefühl kenne ich: Tools die dir eigentlich helfen sollen die
Arbeit zu machen sind Müll, und du ärgerst dich erstmal damit herum
diese Tools zu fixen anstatt an der eigentlichen Aufgabe zu arbeiten.
Einfach nur geil!
Die resultierenden verbalen Ausrutscher bezeichne ich als
berufsbedingte Koprolalie
c.m. schrieb:> und du ärgerst dich erstmal damit herum> diese Tools zu fixen anstatt an der eigentlichen Aufgabe zu arbeiten.
Jetzt muß ich Zeit aufwenden dem Trottel im Silabs-Forum lang und breit
und dreimal zu erklären daß der Bug überhaupt existiert, wie es
ausschaut hat er eine Leseschwäche! Es gibt anscheinend auch überhaupt
keinen Bugtracker und "support" schickt mich ins Forum. Wann immer ich
einen Bug melden will muß ich anscheinend erst an diesem nicht besonders
hellen Türsteher da vorbei, die IDE-Entwickler bekommen das ansonsten
nie zu sehen!
Bernd K. schrieb:> Jetzt muß ich Zeit aufwenden dem Trottel im Silabs-Forum lang und breit> und dreimal zu erklären daß der Bug überhaupt existiert
Normal. Man muss sich damit abfinden dass es unmöglich ist den
"Support"-Leuten das Problem zu erläutern (die, die das irgendwann man
programmiert haben arbeiten bestimmt sowieso nicht mehr da). Durch
schmutzige Tricks und Hacks das Problem zu umgehen ist meist
ökonomischer.
Schreibe in deinem Fall vielleicht "Projekt kompiliert nicht" statt
"Code-Generator erzeugt falschen Code". Es ist meist besser dass die
"Support"-Leute selbst herausfinden woran es liegt, als selbst schon
Ursachenforschung darzulegen, die einem dann nicht abgenommen wird.
Es hilft auch Probleme mit Eval-Boards und Beispielprojekten zu
reproduzieren. Wenn es da schon nicht funktioniert werden die eher
hellhörig.
Bernd K. schrieb:> Wann immer ich> einen Bug melden will muß ich anscheinend erst an diesem nicht besonders> hellen Türsteher da vorbei, die IDE-Entwickler bekommen das ansonsten> nie zu sehen!
Der "Türsteher" nennt sich offiziell "First Level Support".
Ich bin seit Jahren dafür dass hier ein Auskotz-Bereich erstellt wird,
wo man dann seinen Ärger auch mal los wird ... und wo andere Leute
vielleicht auch mal sehen womit man sich gerade beschäftigt.
Der Thread-Name könnte mit dem User-Namen anfangen und dann kommt das
Thema.
Rolf M. schrieb:> Ist es die Aufgabe des Herstellers, "das Internet" in seiner Gänze> abzuklappern, um rauszufinden, ob jemand einen Bug gefunden hat?
Nein, aber einfach mal vor dem Abgabetermin eine Testsuite drüberlaufen
lassen sollte sich doch erledigen lassen...
Sämtliche Ingeneure, die bei unserem SoC-Hersteller (mit dem Q am
Namensanfang) anfragen, ob ein Treiber den CTS-Test (Google-Testsuite,
verpflichtend für Android) bestanden hat, bekommen keine Antwort darauf.
Auch keine Testresultate. Schlussfolgerung: Die testen nicht.
Joachim B. schrieb:> aber manche Fehler lassen sich durchaus vom> Hersteller in wenigen Tests finden und mal unter uns,>ich glauber den Shice nicht mehr "Sie sind ja der Erste> der das meldet"
Ich habe gerade Spaß mit McAfee... wenn man unter WSL "git clone" oder
"git log" nutzt, wirft das System sofort einen Bluescreen.
Erste Frage vom Support: "Warum sollte McAfee schuld sein?"
- weil das ein McAfee-Treiber ist, der da abstürzt
- Link zu McAfee-Community-Forenpost?
Zweite Frage: "wir hätten gerne Logs".
- ich produziere seit einer Woche Logs.
Meine Frage, ob die wenigstens mal versucht haben, das Problem zu
reproduzieren (Erklärung in der Mail), wird konsequent übergangen und
durch "mehr Logs bitte" beantwortet.
Peter D. schrieb:> Ich hätte eigentlich gedacht, den Codewizzard benutzt man nur einmal> beim Start eines Projektes. Und heraus kommt dann ganz normaler C-Code,> den man in sein Projekt einbindet.
Ich weiß ja nicht... Wir haben so ein System auf Arbeit, wo aus
Excel-Tabellen sowohl C++-Code als auch Header-Dateien rausfallen. Das
passiert nicht automatisch, also hat man fertigen Code.
Inzwischen bin ich der Meinung, dass sämtliche Codegeneratoren als Teil
des Buildprozesses sämtlichen generierten Code neu erzeugen müssen,
denn dann fällt mir wenigstens der Build auf die Nase (oder das Ergebnis
kommt nicht durch die Testsuite). Das merkt man wenigstens rechtzeitig
und nicht eine Woche später, wenn man die Eingabedateien aktualisiert.
Dr. Sommer schrieb:> Von wegen Code-Generatoren:> Simulink generiert Code welcher Typen wie "int32_T" benutzt.> Dieser ist für Cortex-M ein Alias auf "int".
Ich sehe sehr viel Android-Code, der mit VOID, UINT32 und UCHAR garniert
ist. Oder anderen Aliasen für die Standardtypen. Sehr viel Code.
Komplett refaktorisiert und inkompatibel zum Vorgänger, definitiv nicht
älter als 2015.
Und obwohl das alles für Android ist, muss man dadrin mit einem
Windows-Programm rumfuhrwerken und der Code besitzt seine "#ifdef WIN32"
und ist kompatibel mit Visual Studio.
Achso, und er tritt ständig auf NULL-Pointer. Denn die haben ihr
assert() so gebaut, dass es einen NULL-Pointer dereferenziert. Man kann
so einem Compiler schließlich nicht trauen...
Bernd K. schrieb:> GigaDevice (großer chinesischer Hersteller für Flashspeicher und auch> für ARM Cortex MCUs) hat folgende Perle tief drin in seinen Headern> versteckt:> typedef enum {FALSE = 0, TRUE = !FALSE} bool;
Ich kenne nur die Variante mit:
1
#define FALSE 0
2
#define TRUE 1
Und ja, beide Konstanten sehe ich auch ständig. Vergleiche immer in
Yoda-Schreibweise...
Dr. Sommer schrieb:> Das frage ich mich auch. Ich darf mich auch gerade ausführlich mit> chinesischem Code herumschlagen. Der ist auch enorm hässlich.
Ich musste solchen Code bisher nur lesen, aber da gab es einen
gewaltigen Vorteil: Es ist immerhin Code. Hässlich und fehlerhaft, aber
wenigstens nicht zig Ebenen aus Datenstrukturen übereinander gestapelt.
Dr. Sommer schrieb:> Der Code von Microchip (Indien) ist ähnlich toll.
Die Ingeneure auch. An der Uni habe ich deren Kompetenz nur in den
Extremen gesehen (d.h. entweder wirklich Ahnung oder Heißluftgebläse).
Ich wüsste gerne, warum das so ist.
Hannes J. schrieb:> Praktisches Beispiel: Du hast ein Problem mit DHL (wer hat das nicht)?
Inzwischen wird PostNord sogar schon vom Staatsfernsehen als Witz
benutzt...
Aber hey, ich habe heute (Samstag!) einen Anruf von der
Krankenversicherung bekommen, dass ich 50% meiner Arztrechnung
zurückbekomme. Die habe ich 2017 eingereicht. "Ja, wir liegen etwas
zurück."
S. R. schrieb:> bekommen keine Antwort darauf.
Das ist normal. Die großen Haie interessieren sich nicht für kleine
Fische und halten es nicht für nötig, zu antworten. Das ist auch bei
harmlosen Fragen so, welche sich problemlos beantworten lassen sollten.
Auf eine Anfrage von Google würden sie antworten...
S. R. schrieb:> Wir haben so ein System auf Arbeit, wo aus Excel-Tabellen sowohl> C++-Code als auch Header-Dateien rausfallen
C++ aus Excel? Oh graus...
S. R. schrieb:> Ich sehe sehr viel Android-Code, der mit VOID, UINT32 und UCHAR garniert> ist.
Ja, kenne ich. Das ist völlig Banane.
S. R. schrieb:> Und obwohl das alles für Android ist, muss man dadrin mit einem> Windows-Programm rumfuhrwerken und der Code besitzt seine "#ifdef WIN32"> und ist kompatibel mit Visual Studio.
Ja die Entwickler tun sich sehr schwer damit dass Android Linux ist. Sie
stellen nur sehr widerwillig Linux-basierte Android-Tools zur Verfügung.
Am liebsten würden sie alles als .exe anbieten, natürlich nur zu WinXP
kompatibel.
S. R. schrieb:> Man kann so einem Compiler schließlich nicht trauen...
Wer sonst mit MSVC und anderen proprietären Compilern arbeitet... ;-)
S. R. schrieb:> aber wenigstens nicht zig Ebenen aus Datenstrukturen übereinander> gestapelt.
Naja, wenn halt Daten abgebildet werden sollen...
S. R. schrieb:> "Ja, wir liegen etwas zurück."
Benutzen bestimmt SAP ;-)
Dr. Sommer schrieb:>> aber wenigstens nicht zig Ebenen aus Datenstrukturen>> übereinander gestapelt.>> Naja, wenn halt Daten abgebildet werden sollen...
Bei uns auf Arbeit ist der Begriff "convert-function" zum running gag
geworden. Wir haben ungefähr 300 davon, die alle verschiedene
Datenstrukturen ineinander umformen.
Macht schon Spaß, einem Nullpointer hinterherzulaufen, nur um sieben
Ebenen tief im Code ein memcpy zu finden... und dann nochmal ein halbes
Dutzend Ebenen tief runterzumüssen, bis man die (statische!)
Datenstruktur findet. Die Woche ist gelaufen.
Chinesischer Code hat üblicherweise weniger Abstraktionsebenen.
S. R. schrieb:> Bei uns auf Arbeit ist der Begriff "convert-function" zum running gag> geworden
Ich kenn das mehr mit "Tool" ?
S. R. schrieb:> Wir haben ungefähr 300 davon, die alle verschiedene Datenstrukturen> ineinander umformen.
Klingt, als bräuchtet ihr eine normalisierte Struktur, aus welcher dann
die gewünschten Auszüge gemacht werden... das geht am besten in
funktionalen Sprachen
S. R. schrieb:> Macht schon Spaß, einem Nullpointer hinterherzulaufen, nur um sieben> Ebenen tief im Code ein memcpy zu finden
Habt ihr etwa keine assert(pointer) an jeder Funktion?
S. R. schrieb:> Chinesischer Code hat üblicherweise weniger Abstraktionsebenen.
Aber 500-zeilige Funktionen sind auch nicht so super.
Dr. Sommer schrieb:>> Wir haben ungefähr 300 davon, die alle verschiedene Datenstrukturen>> ineinander umformen.>> Klingt, als bräuchtet ihr eine normalisierte Struktur, aus welcher dann> die gewünschten Auszüge gemacht werden...
Nö... das passiert, wenn die Entwickler nicht miteinander reden und sich
nicht vertrauen. Dann gibt es in jedem Modul eine eigene Datenstruktur,
die ein Rechteck beschreibt - und jeweils eine "convert"-Funktion von/zu
den Rechteck-Funktionen des jeweils anderen Moduls.
Und Konstanten/Enumerationen, die Android vordefiniert, haben wir auch
nochmal als separate Datentypen definiert. Mindestens zwei mal.
Dr. Sommer schrieb:> Habt ihr etwa keine assert(pointer) an jeder Funktion?
Manuelle Prüfungen, (fast) überall. Ein zügiger Absturz ist mir aber
lieber, als ein schlichter Eintrag im Log. Zumal der Treiber nach sowas
ohnehin nicht mehr richtig funktioniert.
Aber auch ein assert(pointer) hilft nur begrenzt, wenn einfach Gülle in
die Hardwareregister geschrieben wird. Besonders nervig, wenn das
manchmal funktioniert (use-after-free). Da sucht man sich nen Wolf.
> ich glauber den Shice nicht mehr "Sie sind ja der Erste der das meldet"
Silab geht ja noch, bei Realtek habe ich schon zwei Tage investiert um
ihm einen Fehler genau reproduzierbar zu beschreiben. Als Antwort kam
dann dann: Hätten sie die FAQ Frage Nr. 86 gelesen ...
War also schon jahrelang bekannt und die Kunden sollen sich halt was
anderes raussichen wenns ihnen nicht passt