2016-06-01 13 views

Antwort

1

Die Software, die das Programm/die Daten in den Flash lädt, liest jedes Format, das unterstützt wird, das intel hex, motorola srecord, elf, coff oder eine rohe Binärdatei oder anderes sein kann. und dann das Richtige tun, um den Flash mit den relevanten Einsen und Nullen zu programmieren.

0

Zunächst einmal hat der PC, den Sie gerade verwenden, einen Prozessor, der wie jeder andere Mikrocontroller funktioniert. Sie verwenden es, um im Internet zu surfen, obwohl es alle "1s und 0s auf der Innenseite" ist. Und ich gehe davon aus, dass Ihre aktuelle Firmware nicht annähernd in der Lage ist zu laufen, was Ihr PC in diesem Moment läuft.

micron wird Binärzahlen unterstützen nur (0 & 1)

Ihre Idee, dass "micron unterstützt nur Binärzahlen (0 & 1)" ein Missverständnis ist. Bei einem sehr niedrigen Pegel enthält der Mikrocontroller eine Reihe von Transistoren, von denen jeder nur zwei Informationszustände (ein Bit) speichern kann. Aber der Grund dafür ist einfach, weil dies eine praktische Möglichkeit ist, einen kleinen Datenblock physikalisch zu speichern.

Wenn Sie die Montageanleitung für Ihre uC-Architektur überprüfen, sehen Sie eine große Anzahl von Anweisungen mit unterschiedlichen Datenbreiten (Bits in 8, 16 oder größeren Blöcken). Wenn Ihr Controller beispielsweise 16 Bit ist, dann ist dies die grundlegende Wortgröße für die meisten Befehle, und diejenige, die am effizientesten ist. Bei der Programmierung in C ist dies auch die Größe des "speziellen" Typs int, um den alle kleineren Typen erweitert werden.

Mit anderen Worten, Bits sind nur Bausteine ​​ Ihrer Hardware, und die meiste Zeit sollte Sie nicht einmal auf der Firmware-Ebene betreffen, geschweige denn höhere Anwendungsebenen. Vergleichen Sie es mit einer menschlichen Lebensform: Der menschliche Körper besteht aus Zellen, ist aber auch in der Lage, mehr zu tun als ein einzelliger Organismus, oder?

i Compiler bin mit Quellcode in hex

Eigentlich zu konvertieren, verwenden Sie den Compiler den Maschinencode für Ihre speziellen Mikrocontroller-Architektur zu erstellen. "Hex", genauer gesagt Intel Hex file format, ist nur eines von mehreren Dateiformaten, die zum Speichern des Maschinencodes in einer Datei verwendet werden, und es ist bequemerweise eine ASCII-Datei im Nur-Text-Format, die Sie problemlos in Notepad öffnen können.

Um zu klären, sagen wir Ihnen eine einfache Linie von C-Code wie folgt geschrieben: die Architektur, die Sie zielen, zu konvertieren, um diese zu Maschinencode

a = b + c; 

Ihr Compiler muss wissen.Für eine fiktive uC Architektur, wird dies zunächst auf die folgenden fiktiven assembly language zusammengestellt erhalten:

// compiler decides that a,b,c will be stored at addresses 0x1000, 1004, 1008 

mov ax, (0x1004) // move value from address 0x1004 to accumulator 
add ax, (0x1008) // add value from address 0x1008 to accumulator 
mov (0x1000), ax // move value from accumulator to address 0x1000 

Jeder dieser Befehle hat seine eigene instruction opcode, die im Inneren der Montageanleitung zu finden sind. Wenn der Befehl auf einem oder mehreren Parametern arbeitet, wird uC wissen, dass die Bytes im Anschluss an den Befehlsdatenbytes:

// mov ax, (addr) --> opcode 0x10 
// add ax, (addr) --> opcode 0x20 
// mov (addr), ax --> opcode 0x30 

mov ax, (0x1004) // 0x10 (0x10 0x04) 
add ax, (0x1008) // 0x20 (0x10 0x08) 
mov (0x1000), ax // 0x30 (0x10 0x00) 

Jetzt haben Sie Ihre Maschine-Code erhalten, die, wie Hex-Werte geschrieben wird:

10 10 04 20 10 08 30 10 00 

Und in binäre umgewandelt wird:

0001000000010000000010000100000... 

diese zu Ihrem Controller zu übertragen, werden Sie ein Dateiformat verwenden, das Sie Ihre Flash-Uploader weiß, wie zu lesen, was ist Intel Hex wird am häufigsten verwendet für.

Einmal auf Ihren Mikrocontroller übertragen, wird es als ein Bündel von Bits in seinem Flash-Speicher gespeichert, aber der Controller ist entworfen, um diese Bits in Blöcken von 8 oder mehr Bits zu lesen und sie als Befehl Opcodes oder Daten auszuwerten, abhängig vom Kontext. Für das obige Beispiel, wird es erste 8 Bits gelesen, und zu sehen, dass es eine Anweisung Opcode 0x10 (die einen zusätzlichen Adressparameter stattfindet), wird es die nächsten zwei Bytes gelesen 0x1004 um die Adresse zu bilden. Es wird dann die Anweisung ausführen und die instruction pointer voranbringen.

0

Hex, Dezimal, Binär, sind sie alle nur Formen der Zahl darstellt.

AA hexadezimal ist das gleiche wie 170 in dezimalen und 10101010 in binären (und 252 oder Octal).

Der Grund für die hexadezimale Darstellung verwendet wird, ist, weil es sehr praktisch, wenn mit Mikrocontrollern als ein Hex-Zeichen paßt in 1 knabbern arbeiten. Also ist F 1111, FF ist 1111 1111 und so viert.

+0

Willkommen Überlauf zu Stack! Leider beantwortet dies die Frage nicht. Die UESR fragt nicht, warum hexadezimale Schreibweise verwendet wird, sondern wie man es auf den Mikrocontroller arbeiten zu lassen. –

+0

Danke. OK. Ich habe nur versucht zu erklären, dass hex und binary tatsächlich nur eine Möglichkeit sind, dasselbe zu schreiben, und die gleiche Datei könnte in Hex, Binär oder jeder anderen Basis geschrieben werden. –