Εισαγωγή
Introduction
Όσοι με γνωρίζουν, ξέρουν πως η συμπάθειά μου για τους μικροελεγκτές MSP430 της Texas Instruments είναι μεγάλη. Είναι 16 bit, πολυ χαμηλής κατανάλωσης, με μπόλικο διαθέσιμο περιφερειακό hardware και γενικά είναι πολύ φιλικοί στη χρήση σε προχωρημένα κυκλώματα. Βέβαια, άλλη μια μεγάλη συμπάθεια την έχω και στο λειτουργικό Linux που εδώ και πάρα πολλά χρόνια (από το 2ο μισό της δεκαετίας του '90) κάνει τα μηχανήματά μου να λειτουργούν άψογα. Ο συνδυασμός είναι που δημιουργεί και τη σημερινή ανάρτηση :)
Those who know me are aware of my great fondness for Texas Instruments' MSP430 microcontrollers. These 16-bit, ultra-low-power devices come with abundant peripheral hardware and are generally very user-friendly for advanced circuits. Of course, I also have a great affection for the Linux operating system, which has kept my machines running flawlessly for many years (since the second half of the 1990s). The combination of these two passions is what inspired today's post :)
Η εταιρία Texas Instruments, εδώ και αρκετά χρόνια (εγώ γνώρισα τη σειρά MSP430 από το 2003) έχει δημιουργήσει το περιβάλλον προγραμμαστισμού Code Composer Studio, ή αλλιώς CCS. Το CCS από κάποια έκδοση και μετά (δε θυμάμαι ποια) είναι βασισμένο στο περιβάλλον Eclipse, όπως και περιβάλλοντα από άλλες εταιρίες για τον προγραμματισμό των δικών τους μκροελεγκτών. Γενικά η πλατφόρμα Eclipse χρησιμοποιείται πάρα πολύ σε περιβάλλοντα προγραμματισμού μικροελεγκτών μιας και είναι αρκετά ευέλικτη και επεκτάσιμη. Η δύναμη του ανοικτού λογισμικού!
Texas Instruments has developed the Code Composer Studio (CCS) programming environment over many years (I first encountered the MSP430 series in 2003). From a certain version onwards (I don't remember which), CCS has been based on the Eclipse platform, like development environments from other companies for programming their own microcontrollers. Generally, the Eclipse platform is widely used in microcontroller programming environments because it's quite flexible and extensible. The power of open source!
Όλα αυτά τα χρόνια, τα project που έχω φτιάξει με τους εν λόγω μικροελεγκτές και to CCS είναι πραγματικά άπειρα! Το CCS είναι, φυσικά, το εργαλείο με το οποίο φτιάχνω τον κώδικα κάθε φορά. Η γλώσσα που χρησιμοποιώ είναι η assembly μιας και συνήθως έχω να κάνω με ευαίσθητα χρονικά περιθώρια κατά την εκτέλεση του κώδικα, αλλά και του μεγάλου αριθμού βιβλιοθηκών που έχω χτίσει και επαναχρησιμοποιώ, με ελάχιστες τροποποιήσεις.
Over all these years, the projects I've created with these microcontrollers and CCS are truly countless! CCS is, of course, the tool I use to write my code every time. The language I use is assembly, as I often deal with sensitive timing margins during code execution, as well as the large number of libraries I've built and reuse with minimal modifications.
Τον τελευταίο καιρό και με την εμφάνιση της σειράς των μικροελεγκτών MSPM0, η Texas Instruments ξεκίνησε τη μετάβαση του CCS στην πλατφόρμα Eclipse-Theia. Εδώ είναι που ξεκινάει η ανάγκη για τη δημιουργία ενός extension για χρωματική σύνταξη της γλώσσας assembly για τους MSP430... Αλλά ας τα πάρουμε όλα από την αρχή.
Recently, with the introduction of the MSPM0 series of microcontrollers, Texas Instruments began transitioning CCS to the Eclipse Theia platform. This is where the need for creating an extension for syntax highlighting of assembly language for MSP430 arises... But let's take things from the beginning.
Code Composer Studio και Eclipse Theia
Εδώ και λίγα χρόνια, η μαμά εταιρία ξεκίνησε μια προσπάθεια να αλλάξει το περιβάλλον στο οποίο βασιζόταν το CCS και να περάσει σταδιακά στην πλατφόρμα Eclipse-Theia. Η Eclipse Theia είναι μια νεότερη, ευέλικτη πλατφόρμα ανάπτυξης που μοιάζει οπτικά με το VS Code, αλλά με σημαντικές τεχνολογικές και αρχιτεκτονικές διαφορές από την κλασική Eclipse IDE. Tα βασικά χαρακτηριστικά και oi διαφορές τους φαίνονται στον ακόλουθο πίνακα:
For a few years now, the parent company has been making an effort to change the platform on which CCS was based and gradually transition to the Eclipse Theia platform. Eclipse Theia is a newer, more flexible development platform that visually resembles VS Code but has significant technological and architectural differences from the classic Eclipse IDE. The key features and differences are shown in the following table:
Σύγκριση Eclipse IDE με Eclipse TheiaComparison of Eclipse IDE with Eclipse Theia | ||
---|---|---|
ΧαρακτηριστικόFeature | Eclipse IDE | Eclipse Theia |
ΑρχιτεκτονικήArchitecture | Μονολιθική εφαρμογή (Desktop only)Monolithic application (Desktop only) | Διαχωρισμός client/server (cloud-ready)Client/server separation (cloud-ready) |
ΕπεκτασιμότηταExtensibility | Χρησιμοποιεί παλιότερο plugin system (OSGi)Uses older plugin system (OSGi) | Υποστηρίζει VS Code extensions (και δικά της plugins)Supports VS Code extensions (and its own plugins) |
ΤεχνολογίαTechnology | Java/SWT (παλιότερα GUI frameworks)Java/SWT (older GUI frameworks) | HTML/CSS/TypeScript (modern web stack) |
Cloud/Remote Development | Απαιτεί "εξωτερικές" λύσεις (π.χ. Eclipse Che)Requires third-party solutions (e.g., Eclipse Che) | Επίσημη υποστήριξη για cloud και containersOfficial support for cloud and containers |
Διαθέσιμες ΕκδόσειςAvailable Versions | Μόνο desktop εφαρμογήDesktop application only | Λειτουργεί ως web app ή desktop (Electron)Runs as web app or desktop (Electron) |
Απίτηση σε ΕξοπλισμόHardware Requirements | Βαρύτερο, με πιο πολλά pre-installed toolsHeavier, with more pre-installed tools | Πιο ελαφρύ και γρήγορο (συγκρίσιμο με VS Code)Lighter and faster (comparable to VS Code) |
Και οι δύο πλατφόρμες είναι ανοικτού κώδικα και υποστηρίζονται από το Eclipse Foundation.
Both platforms are open source and supported by the Eclipse Foundation.
Πλεονεκτήματα παλιόυ Eclipse IDE
Advantages of the Old Eclipse IDE
- Ωριμότητα:Maturity:
- Έχει περισσότερα built-in tools (π.χ., JDT για Java, CDT για C/C++).Has more built-in tools (e.g., JDT for Java, CDT for C/C++).
- Καλύτερη υποστήριξη για legacy projects (π.χ., Swing, RCP).Better support for legacy projects (e.g., Swing, RCP).
- Δεσμευμένη Κοινότητα:Dedicated Community:
- Πιο πολλά plugins και εκπαιδευτικό υλικό για ειδικές χρήσεις (π.χ., enterprise Java).More plugins and educational material for specific uses (e.g., enterprise Java).
- Ολοκληρωμένα Features:Complete Features:
- Έτοιμα εργαλεία για debugging, profiling, και testing σε βάθος.Ready-made tools for debugging, profiling, and in-depth testing.
Πλεονεκτήματα Eclipse Theia
Advantages of Eclipse Theia
- Cloud-First:
- Σχεδιάστηκε για cloud-based environments (π.χ., Docker, Kubernetes).Designed for cloud-based environments (e.g., Docker, Kubernetes).
- Μπορεί να τρέξει ως web application (π.χ., σε browser) ή ως desktop app.Can run as a web application (e.g., in a browser) or as a desktop app.
- Συμβατότητα με VS Code:VS Code Compatibility:
- Υποστηρίζει extensions του VS Code (μέσω του OpenVSX marketplace), αλλά και δικά της plugins.Supports VS Code extensions (via OpenVSX marketplace), as well as its own plugins.
- Παρόμοιο UI/UX με το VS Code (π.χ., activity bar, side panels).Similar UI/UX to VS Code (e.g., activity bar, side panels).
- Ευελιξία:Flexibility:
- Επιτρέπει εξαιρετική προσαρμογή (π.χ., δημιουργία custom IDEs για συγκεκριμένες ανάγκες).Allows excellent customization (e.g., creating custom IDEs for specific needs).
- Ιδανική για embedded και IoT development (όπως ο MSP430).Ideal for embedded and IoT development (like MSP430).
- Ταχύτερη Εκκίνηση:Faster Startup:
- Λιγότερο "φορτωμένη" από την κλασική Eclipse, με πιο γρήγορη απόκριση.Less "bloated" than classic Eclipse, with quicker response times.
Βλέπουμε πως η πλατφόρμα Theia είναι δημιουργημένη με βλέμα στις τρέχουσες τεχνολογίες και δυναμικές της δημιουργίας software. Συνεπώς είναι πολύ λογική η κίνηση της Texas Instruments να μεταβεί στη νέα πλατφόρμα για το Code Composer Studio. Αυτή τη στιγμή που δημιουργείται το παρόν άρθρο, το CCS Theia βρίσκεται στην έκδοση 20.1.1.8.
We see that the Theia platform is built with current technologies and software development dynamics in mind. Therefore, Texas Instruments' move to transition CCS to the new platform is very logical. At the time of writing this article, CCS Theia is at version 20.1.1.8.
Code Composer Studio Theia
Το Code Composer Studio (CCS) Theia είναι η νεότερη, cloud-enabled έκδοση του παραδοσιακού CCS της Texas Instruments. Αποτελεί μια μοντέρνα εναλλακτική για ανάπτυξη ενσωματωμένων συστημάτων (MSP430, Sitara, C2000 κλπ.), με τεχνολογικές βελτιώσεις και νέες δυνατότητες. Τα χαρακτηριστικά του είναι:
Code Composer Studio (CCS) Theia is the newer, cloud-enabled version of Texas Instruments' traditional CCS. It serves as a modern alternative for developing embedded systems (MSP430, Sitara, C2000, etc.), with technological improvements and new capabilities. Its features include:
- Μοντέρνα Αρχιτεκτονική:Modern Architecture:
- Βασίζεται σε Eclipse Theia (web/cloud-ready) αντί για την παλιά πλατφόρμα Eclipse IDE.Based on Eclipse Theia (web/cloud-ready) instead of the old Eclipse IDE platform.
- Υποστηρίζει και desktop (Electron) και cloud-based ανάπτυξη (π.χ., μέσω Docker).Υποστηρίζει και desktop (Electron) και cloud-based ανάπτυξη (π.χ., μέσω Docker).
- VS Code-like Εμπειρία:VS Code-like Εμπειρία:
- Παρόμοιο UI με το VS Code (activity bar, side panels, terminal integration).Παρόμοιο UI με το VS Code (activity bar, side panels, terminal integration).
- Υποστηρίζει extensions του VS Code (μέσω του OpenVSX marketplace).Supports both desktop (Electron) and cloud-based development (e.g., via Docker).
- Cloud & Remote Development:
- Λειτουργεί σε containers (π.χ., Docker) για ευκολότερη διαχείριση dependencies.Operates in containers (e.g., Docker) for easier dependency management.
- Ιδανικό για ομαδικές εργασίες ή ανάπτυξη σε απομακρυσμένα συστήματα.Ideal for team projects or development on remote systems.
- Βελτιωμένη Επεκτασιμότητα:Improved Extensibility:
- Ευκολότερη ενσωμάτωση νέων εργαλείων και γλωσσών (μέσω TypeScript/JavaScript).Easier integration of new tools and languages (via TypeScript/JavaScript).
- Διαχωρισμός μεταξύ frontend (browser) και backend (compiler/debugger).Separation between frontend (browser) and backend (compiler/debugger).
- Ενσωματωμένα Εργαλεία TI:Built-in TI Tools:
- Διατηρεί όλα τα γνωστά εργαλεία του CCS (π.χ., MSP430 compiler, debugger, EnergyTrace).Retains all the familiar CCS tools (e.g., MSP430 compiler, debugger, EnergyTrace).
- Επίσημη υποστήριξη για TI SDKs και πακέτα BSPs.Official support for TI SDKs and BSP packages.
Πλεονεκτήματα του CCS Theia
Advantages of CCS Theia
- Γρήγορη προσαρμογή: Εύκολη προσθήκη νέων γλωσσών ή εργαλείων (π.χ., Python για scripting).Quick adaptation: Easy addition of new languages or tools (e.g., Python for scripting).
- Cross-platform: Λειτουργεί σε Windows/Linux/macOS και ως web app.Cross-platform: Works on Windows/Linux/macOS and as a web app.
- Debugging anywhere: Ο debugger μπορεί να τρέξει σε απομακρυσμένο μηχάνημα (π.χ., cloud server).Debugging anywhere: The debugger can run on a remote machine (e.g., cloud server).
- Σύγχρονη ανάπτυξη plugins: Με TypeScript αντί για Java (πιο προσβάσιμο για web developers).Modern plugin development: With TypeScript instead of Java (more accessible for web developers).
Πιθανά Μειονεκτήματα
Potential Disadvantages
- Λιγότερα plugins: Η κοινότητα ακόμα μεταναστεύει από το κλασικό Eclipse.Fewer plugins: The community is still migrating from classic Eclipse.
- Όχι όλα τα features: Κάποιες προηγμένες λειτουργίες του classic CCS μπορεί να λείπουν.Not all features: Some advanced functionalities of classic CCS may be missing.
- Εξάρτηση από browsers: Η web έκδοση μπορεί να έχει περιορισμούς σε offline λειτουργία.Browser dependency: The web version may have limitations in offline operation.
Σε γενικές γραμμές, το CCS Theia είναι ένα πολλά υποσχόμενο βήμα προς τη μελλοντική ανάπτυξη ενσωματωμένων συστημάτων, ιδιαίτερα αν είναι αναγκαία η ολοκλήρωαη cloud ή αν κάποιος προτιμάει μια VS Code-like εμπειρία. Ωστόσο, αν είναι απαραίτητα κάποια legacy plugins ή προηγμένες λειτουργίες του κλασικού CCS, ίσως αξίζει η αναμονή μέχρι να ωριμάσει.
Overall, CCS Theia is a promising step toward the future development of embedded systems, especially if cloud integration is needed or if one prefers a VS Code-like experience. However, if certain legacy plugins or advanced features of classic CCS are essential, it might be worth waiting until it matures further.
Syntax Highlighting
Όλοι όσοι ασχολούνται με τον προγραμματισμό θα γνωρίζουν πόσο σημαντική είναι η χρωματική σύνταξη του κώδικα. Αν μη τι άλλο, η εμφάνιση των σχολίων με διαφορετικό χρώμα απ' ότι ο υπόλοιπος κώδικας, είναι πολύ σημαντική. Φυσικά, όλη η χρωματική σύνταξη που βοηθάει στο να αναγνωρίσουμε κάθε τι μέσα σε ένα κώδικα με μια απλή ματιά χωρίς καν να χρειαστεί να τον διαβάσουμε είναι από μόνο του ένα μεγάλο βοήθημα.
Everyone involved in programming knows how important syntax highlighting is. At the very least, displaying comments in a different color from the rest of the code is very important. Of course, all syntax highlighting that helps us recognize elements in code at a glance without even needing to read it is a great aid in itself.
Κάπως έτσι ξεκινάει και η σημερινή ανάρτηση... Τό κλασικό, παλιό CCS υποστηρίζει άψογα τη χρωματική σύνταξη, την οποία μάλιστα μπορούμε να επιλέξουμε ακόμα και τα χρώματα που θέλουμε να εμφανίζεται το κάθε στοιχείο. Ενώ το CCS Theia υποστηρίζει χρωματική σύνταξη σε ανώτερες γλώσσες προγραμματισμού, όπως C/C++, για την assembly ούτε καν υπάρχει στα πλάνα των κατασκευαστών του. Όσο για την ήδη υπάρχουσα χρωματκή σύνταξη, η επιλογή των χρωμάτων έχει γίνει από τους κατασκευαστές του CCS Theia και ο χρήστης δεν έχει τη δυνατότητα να τα αλλάξει!
This is where today's post begins... The classic, old CCS supports syntax highlighting perfectly, and we can even choose the colors we want for each element. While CCS Theia supports syntax highlighting for higher-level programming languages like C/C++, for assembly, it doesn't even exist in the developers' plans. As for the existing syntax highlighting, the color choices have been made by the CCS Theia developers, and the user doesn't have the option to change them!
Η συμπάθειά μου για τη γλώσσα assembly είναι γνωστή. Όμως το να έχω ένα περιβάλλον προγραματισμού χωρίς χρωματική σύνταξη είναι λίγο οδυνηρό, μιας κι έχω καλομάθει ακόμα από την εποχή του ZX Spectrum και του Amstrad 6128 που προγραμμάτιζα σε assembly του Z80, με χρωματική σύνταξη... βασική χρωματική σύνταξη αλλά υπήρχε! Βασικά, ήμουν της άποψης να αφήσω λίγο το Theia να ωριμάσει και μέχρι τώρα χρησιμοποιούσα το παλιό καλό CCS. Όμως, μιας και χρησιμοποιώ το openSUSE Tumbleweed το οποίο βάζει πάντα τις τελευταίες βιβλιοθήκες κλπ, μετά από κάποια αναβάθμιση το CCS σταμάτησε να λειτουργεί! Όχι, πως αυτό αργά ή γρήγορα δε θα συνέβαινε, ούτως ή άλλως. Και μιας κι έχει σταματήσει η υποστήριξή του από τη μαμά εταιρία, η χρήση του CCS Theia είναι πλέον μονόδρομος.
My fondness for assembly language is well-known. However, having a programming environment without syntax highlighting is somewhat painful, as I've grown accustomed to it since the days of the ZX Spectrum and Amstrad 6128, where I programmed in Z80 assembly with syntax highlighting... basic syntax highlighting, but it existed! Initially, I thought of letting Theia mature a bit and continued using the good old CCS. However, since I use openSUSE Tumbleweed, which always updates to the latest libraries, etc., after some upgrade, CCS stopped working! Not that this wouldn't have happened sooner or later anyway. And since support for it has been discontinued by the parent company, using CCS Theia is now the only way forward.
Αρχικά έγραφα τον κώδικα στο αγαπημένο μου Kate, στο οποίο εδώ και αρκετά χρόνια έχω φτιάξει χρωματική σύνταξη για την assembly του MSP430, ενώ κάποια στιγμή το εξέλιξα συμπληρώνοντας και τα νέα δεδομένα του MSP430X. Όμως, το να γυρίζεις από editor σε editor είναι λίγο κουραστικό. Έτσι, πήρα την απόφαση να δω πως μπορώ να προσθέσω χρωματική σύνταξη στο CCS Theia. Αρχικά να αναφέρω πως δεν έιχα ιδέα πώς θα μπορούσε να γίνει αυτό, αλλά έψαχνα ν βρω τίποτα έτοιμα extensions που να κάνουν τη δουλειά μου. Βρήκα κάποιο extension που έκανε για το VS Code και ψάχνοντας τριγύρω βρήκα πως το Theia υποστηρίζει τα VS Code Extensions. Προσάθησα να δω πως θα το εγκαταστήσω... Μου πήρε λίγο χρόνο και μερικές ταρζανιές και τελικά βρήκα τι να κάνω και που θα περάσω τον κατάλογο του extension για να το δει το Theia και να το χρησιμοποιήσει. Όμως, η χρωματική σύνταξη που μου προσεφερε δεν ήταν αυτό που ήθελα. Έτσι, μετά από αρκετό διάβασμα και reverse engineering σε άλλα plugins βρήκα πως μπορώ να φτιάξω ένα δικό μου extension επάνω στο ίδιο το CCS Theia.
Initially, I wrote the code in my beloved Kate editor, where I had created syntax highlighting for MSP430 assembly many years ago, and at some point, I enhanced it by adding support for the new MSP430X features. However, switching between editors is a bit tiresome. So, I decided to see how I could add syntax highlighting to CCS Theia. Initially, I had no idea how this could be done, but I searched for ready-made extensions that could do the job. I found some extensions for VS Code, and after searching around, I discovered that Theia supports VS Code extensions. I tried to see how to install it... It took some time and a few "Tarzan-like" attempts, but eventually, I figured out what to do and where to place the extension directory for Theia to recognize and use it. However, the syntax highlighting it offered wasn't what I wanted. So, after much reading and reverse engineering of other plugins, I found out how to create my own extension for CCS Theia itself.
Τελικό Syntax Highlighting Extension για το CCS Theia
Final Syntax Highlighting Extension for CCS Theia
Και αφού έβαλα κάτω το documentation του TextMate, του VS Code και του Eclipse Theia τελικά κατάφερα να δημιουργήσω ένα extension που να μου παρέχει όσα χρειάζομαι. Όλα; Περίπου. Αυτό που δε μπόρεσα να κάνω είναι να επιλέγω ακριβώς το χρώμα που θα ήθελα να εμφανίζεται το κάθε στοιχείο. Όμως, χρησιμοποιώντας τα ήδη υπάρχοντα χρώματα έχω αυτό που με βοηθάει, πλέον, να γράψω τον κώδικά μου στην αγαπημένη μου γλώσσα.
After studying the documentation of TextMate, VS Code, and Eclipse Theia, I finally managed to create an extension that provides everything I need. Everything? Almost. What I couldn't do is choose the exact color I'd like for each element. However, by using the existing colors, I now have what helps me write my code in my favorite language.
Αρχικά ας δούμε ποια είναι τα υπάρχοντα χρώματα. Για να μπορέσω να τα βρω, αρχικά έψαχνα αρχεία στα οποία περιγράφονται. Βασικά έτσι θα μπορούσα να τα αλλάξω, αλλά... δεν βρήκα τίποτα. Έτσι, πέρασα στο επόμενο βήμα, να χρησιμοποιήσω το εργαλείο CTRL+SHIFT+P => Developer: Inspect Tokens. Από τη στιγμή που το TextMate ορίζει κάποια classes (βλ. TextMate Language JSON) μπορούμε, με υπομονή, να τα δοκιμάσουμε όλα. Έτσι, βγαίνει το ακόλουθο στιγμότυπο:
First, let's see what the existing colors are. To find them, I initially searched for files describing them. Basically, this is how I could change them, but... I found nothing. So, I moved to the next step: using the CTRL+SHIFT+P => Developer: Inspect Tokens tool. Since TextMate defines some classes (see TextMate Language JSON), we can patiently test them all. Thus, the following snapshot was created:
Για να δημιουργηθεί το στιγμιότυπο με τα χρώματα χρησιμοποιήθηκε το LibreOffice Calc ενώ μέσα στα macros μπήκε κώδικας του JohnSUN που βρίσκεται στο forum του LiberOffice.org
LibreOffice Calc was used to create the snapshot with the colors, while macros included code by JohnSUN found on the LiberOffice.org forum.
Οι δυνατότητες που έχουν μπει στο extension είναι αρκετές. Ας τις δούμε όπως περιγράφοτναι μέσα στο readme.md του extension:
The capabilities included in the extension are numerous. Let's see them as described in the extension's readme.md:
- Ετικέτες: Οι ετικέτες είναι λεκτικά που ορίζονται να δείχνουν συγκεκριμένες τιμές, όπως την τρέχουσα θέση προγράμματος, μια σταθερά, κλπ. Για να δηλωθεί μια ετικέτα πρέπει να εμφανιστή στην αρχή-αρχή της γραμμής. Μια ετικέτα μπορεί να περιέχει γράμματα, κεφαλαία ή μικρα, ψηφία, την κάτω παύλα ('_') και το δολάριο ('$'), ενώ ο πρώτος της χαρακτήρας δε μπορεί να είναι ψηφίο ή δολάριο. Μπορεί να ακολουθείται προεραιτικά από ':'.Φυσικά, όταν χρησιμοποιούνται στον κώδικα για ανάκτηση της τιμής της ετικέτας, τότε δεν μπαίνει η ':'.
- Τοπικές Ετικέτες: Οι τοπικές ετικέτες χρησιμοποιούνται μέσα σε macros. Όταν ένα macro γίνεται expand σε ένα σημείο του προγράμματος, αν ορίζει συγκεκριμένες ετικέτες, τότε στην περίπτωση που το macro χρησιμοποιείται παραπάνω από μια φορές, η ίδια ετικέτα θα ορίζεται και αυτή παραπάνω από μια φορές. Το αποτέλεσμα θα είναι η δημιουργία ένός σφάλματος. Γι' αυτό το λόγο περιγράφουμε τοπικές ετικέτες, στις οποίες, κάθε φορά που ένα macro γίνεται expand, ο compiler προσθέτει και έναν αριθμό μοναδικό ώστε να αποφευχθεί το πρόβλημα του επαναορισμού. Αυτές είναι κανονικές ετικέτες οι οποίες ακολουθούνται από το Αγγλικό ερωτηματικό ('?'). Μέσα στον κώδικα, όταν γίνεται χρήση της ετικέτας για ανάκτηση της ορισθείσας τιμής, το τελικό '?' είναι απαραίτητο να υπάρχει.
- Ετικέτες Αντικατάστασης: Επίσης σε λειτουργίες macro υπάρχει η περίπτωση να θέλουμε να δωθεί μια τιμή από τις παραμέτρους. Αυτή η τιμή να αντικαταστήσει ένα τμήμα μιας άλλης ετικέτας. Έτσι, δημιουργούμε την ετικέτα αντικατάστασης, η οποία είναι μια κανονική ετικέτα που πριν και μετά από αυτή υπάρχψει το σύμβολο ':'. Κατά τη διάρκεια της μεταγλώτισσης αυτό το τμήμα της ετικέτας αντικαθίσταται με την ίδια της την τιμή. Ένα παράδειγμα είναι η ετικέτα ":count:"
- Σχετικές ετικέτες: Είναι ατικέτες που αντικαθίστανται από κατάλληλη τιμή του PC στο σημείο που έχουν οριστεί, όπως η ετικέτα '$'.
- Μνημονικά: Τα μηνμονικά είναι ουσιαστικά οι εντολές που γνωρίζει ο επεξεργαστής μας. Το extension αναγνωρίζει όλα τα μηνμονικά που περιέχει η οικογένεια MSP430 και η εκτεταμένη οικογένεια MSP430X. Τα μνημονικά χρωματίζονται διαφορετικά:
- Βασικά μνημονικά: Είναι τα μνημονικά που εκτελούν κανονικές λειτουργίες. Η οικογένεια MSP430 είναι τύπου RISC κι έτσι υποστηρίζει 27 βασικές εντολές.
- Μνημονικά αλλαγής της ροής του προγράμματος: Μνημονικά όπως τα JMP, BR, CALL και RET.
- Εξομοιούμενα μνημονικά: Είναι μνημονικά που θα μπορούσαν να χρησιμοποιηθούν, αλλά στην πραγματικότητα εξομοιώνουν κάποιες άλλες εντολές από ττα βασικά μνημονικά. Π.χ. ένα τέτοιο είναι το INC Rx όπου στην πραγματικότητα αυτό αντικαθίσταται από το ADD #1,Rx. Τέτοια μνημονικά υπάρχουν 24 μέσα στην assembly του MSP430 και αναγνωρίζονται από το extension δείχνοντάς τα διαφορετικά. Αυτό είναι αρκετά χρήσιμο αν κάποιος προσπαθεί να δει τους κύκλους που χρειάζεται μια εντολή ή το χώρο που καταλαμβάνει μέσα στη μνήμη, μιας και αυτό θα πρέπει να γίνει με βάση την ακριβή εντολή που εκτελείται.
- Εξομοιούμενα μνημονικά αλλαγής ροής προγράμματος: Είναι μνημονικά, όπως η εντολή RET που εξομοιώνεται με την εντολή MOV @SP+,PC και αλλάζει την ομαλή ροή του προγράμματος.
- Εκτεταμένα βασικά μνημονικά: Είναι μνημονικά της οικογένειας MSP430X που δεν υπάρχουν στην MSP430. Αυτά έχουν τη δυνατότητα να λειτουργούν με 20-bit καταχωρητές, για προσπέλαση σε μεγαλύτερη μνήμη και επεξεργασία 20-bit τιμών.
- Εκτεταμένα εξομοιούμενα μνημονικά: Όπως η οικογένεια MSP430 έχει μνημονικά που τα εξομοιώνει με χρήση βασικών, έτσι γίνεται και με την οικογένεια MSP430X. Με τον ίδιο τρόπο θα δούμε την εντολή INCX Rx να εξομοιώνεται με χρήση της βασικής εντολής ADDX #1,Rx.
- Εκτεταμένα μνημονικά αλλαγής ροής προγράμματος: Ανήκουν στην οικογένεια MSP430X και είναι μνημονικά που εκμεταλεύονται την επεκταμένη μνήμη 20-bit που χρησιμοποιεί. Αποτελείται από μνημονικά όπως CALLA που μπορεί να κάνει κλήση σε μια υπορουτίνα που βρίσκεται σε όλο το φάσμα της χρησιμοποιούμενης μνήμης και πάνω από τα πρώτα 64ΚΒ.
- Εκτεταμένα εξομοιούμενα μνημονικά αλλαγής ροής προγράμματος: Εκτεταμένα μνημονικά αλλαγής ροής του προγράμματος, όπως η RETA που εξομοιώνεται από την εντολή MOVA @SP+,PC.
- Επιθέματα των εντολών: Μια εντολή μπορεί να προσπελάσει τιμές ενός byte, μιας λέξης ή μιας 20-bit λέξης. Έτσι, υπάρχουν τα επιθέματα .B, .W και .A αντίστοιχα.
- Καταχωρητές: Οι οικογένειες MSP430(X) έχουν 16 καταχωρητές, τους R0 έως R15. Κάποιοι από αυτούς έχουν ειδική λειτουργία, όπως ο R0 που είναι ο PC, ο R1 που είναι ο SP και ο R2 που είναι ο SR.
- Αριθμούς: Δυαδικούς, οκταδικούς, δεκαδικούς ή δεκαεξαδικούς, είτε με χρήση προθέματος, όπως ο 0xFF35 είτε με χρήση επιθέματος, όπως ο 0FF35h.
- Σύμβολα: Αριθμητικά ή λογικών πράξεων, κλπ.
- Λεκτικά: Είτε με χρήση απλών είτε με χρήση διπλών εισαγωγικών.
- Εκτεταμένοι χαρακτήρες: Οι ειδικοί χαρακτήρες που χρησιμοποιούνται όπως οι απλοί όταν προηγείται η '\', όπως ο '\n', κλπ.
- Προ-ορισμένες συναρτήσεις: Από τον preprocessor ορίζονται κάποιες βασικές συναρτήσεις, όπως οι $HI16(), $LO16() ή $isdefed(). Αυτές οι συναρτήσεις πάντα ξεκινάνε από $
- Εντολές του preprocessor: Οδηγείες που δίνουμε στον preprocessor ώστε να διαμορφώσει κατάλληλα το πρόγραμμά μας, όπως .align για να κάνει στοίχιση κάποιας μεταβλητής σε κατάλληλη θέση στη μνήμη, ή .sect που ορίζει τον τομέα της μνήμης στην οποία θα μπει το ακόλουθο τμήμα προγράμματος, κλπ.
- Σχόλια: Είναι γνωστή η δύναμη των σχολίων στον κώδικά μας. Στην assembly υποστηρίζονται μόνο σχόλια μιας γραμμής. Αυτά είτε ξεκινάνε με ';' σε οποίοδήποτε σημείο μιας γραμμής (αρχή ή όχι), είτε ξεκινάνε με '*', αλλά αυτό πρέπει να είναι στην αρχή-αρχή της γραμμής.
- Εμφωλευμένα σχόλια: Πολλές φορές μέσα στον κώδικά μας, εκτός από την επεξήγηση της λογικής του προγράμματος, βάζουμε και μηνύματα, είτε προς εμάς, για να θυμηθούμε κάτι σημαντικό που πρέπει να κάνουμε, είτε προς άλλους με τους οποίους συνεργαζόμαστε. Το extension δίνει τη δυνατότητα να δημιουργήσουμε τέτοιου είδους σχόλια. Αυτό γίνεται με κάποιες κωδικές λέξεις. Οι λέξεις που υποστηρίζονται είναι οι NOTE, INFO, TODO, TO-DO, FIXME, FIX-ME, FIXIT, FIX-IT και BUG. Όταν μέσα στα σχόλια εμφανίζεται αυτή η ετικέτα ακολουθούμενη από ':', τότε αναγνωρίζεται η εκκίνηση ενός εμφωλευμένου σχολίου και χρωματίζονται διαφορετικά. Προεραιτικά, η κωδική λέξη μπορεί να ακολουθείται από '@' και ένα username (π.χ. BUG@eliaschr:) ή να ακολουθεί ένα username με '@' (όπως eliaschr@TODO:). Το εμφωλευμένο σχόλιο συνεχίζεται σε όλες τις ακόλουθες γραμμές σχολίων, ακόμα και των κενών, μέχρι
- Εμφάνιση της κωδικής λέξης ακολουθούμενης από #end (όπως NOTE#end) ή
- Εμφάνισης μιας γραμμής κώδικα
- Labels: Labels are identifiers that are defined to represent specific values, such as the current program location, a constant, etc. To declare a label, it must appear at the very beginning of a line. A label can contain letters, uppercase or lowercase, digits, the underscore ('_'), and the dollar sign ('$'), while its first character cannot be a digit or dollar sign. It can be optionally followed by ':'. Of course, when used in code to retrieve the label's value, the ':' is not included.
- Local Labels: Local labels are used within macros. When a macro is expanded at a point in the program, if it defines specific labels, then if the macro is used more than once, the same label would be defined multiple times. The result would be an error. For this reason, we describe local labels, where each time a macro is expanded, the compiler adds a unique number to avoid the problem of redefinition. These are normal labels followed by the question mark ('?'). In code, when the label is used to retrieve its defined value, the final '?' must be present.
- Substitution Labels: Also in macro operations, there may be cases where we want to pass a value from the parameters. This value should replace part of another label. Thus, we create the substitution label, which is a normal label preceded and followed by the colon symbol ':'. During compilation, this part of the label is replaced with its own value. An example is the label ":count:".
- Relative Labels: These are labels that are replaced by the appropriate PC value at the point they are defined, such as the label '$'.
- Mnemonics: Mnemonics are essentially the instructions known by our processor. The extension recognizes all mnemonics included in the MSP430 family and the extended MSP430X family. The mnemonics are colored differently:
- Basic Mnemonics: These are mnemonics that perform normal operations. The MSP430 family is RISC-based and thus supports 27 basic instructions.
- Program Flow Change Mnemonics: Mnemonics like JMP, BR, CALL, and RET.
- Emulated Mnemonics: These are mnemonics that could be used but are actually emulated using other basic mnemonics. For example, INC Rx is actually replaced by ADD #1,Rx. There are 24 such mnemonics in MSP430 assembly, and the extension recognizes them by displaying them differently. This is quite useful if someone is trying to see the cycles an instruction needs or the space it occupies in memory, as this must be based on the exact instruction being executed.
- Emulated Program Flow Change Mnemonics: These are mnemonics like the RET instruction, which is emulated by the MOV @SP+,PC instruction and changes the normal program flow.
- Extended Basic Mnemonics: These are mnemonics of the MSP430X family that don't exist in MSP430. These can operate with 20-bit registers, access larger memory, and process 20-bit values.
- Extended Emulated Mnemonics: Just as the MSP430 family has mnemonics emulated using basic ones, the same happens with the MSP430X family. Similarly, we'll see the INCX Rx instruction emulated using the basic ADDX #1,Rx instruction.
- Extended Program Flow Change Mnemonics: These belong to the MSP430X family and are mnemonics that leverage the extended 20-bit memory it uses. It includes mnemonics like CALLA, which can call a subroutine located anywhere in the used memory space, even above the first 64KB.
- Extended Emulated Program Flow Change Mnemonics: Extended program flow change mnemonics, like RETA, which is emulated by the MOVA @SP+,PC instruction.
- Instruction Suffixes: An instruction can access byte values, word values, or 20-bit word values. Thus, there are the suffixes .B, .W, and .A, respectively.
- Registers: The MSP430(X) families have 16 registers, R0 to R15. Some of these have special functions, such as R0 being the PC, R1 being the SP, and R2 being the SR.
- Numbers: Binary, octal, decimal, or hexadecimal, either using a prefix like 0xFF35 or a suffix like 0FF35h.
- Symbols: Numeric or logical operators, etc.
- Strings: Either using single or double quotes.
- Escape Characters: Special characters used like regular ones when preceded by '\', such as '\n', etc.
- Predefined Functions: The preprocessor defines some basic functions, like $HI16(), $LO16(), or $isdefed(). These functions always start with $.
- Preprocessor Directives: Instructions we give to the preprocessor to properly shape our program, like .align to align a variable at a suitable memory location, or .sect, which defines the memory section where the following program part will be placed, etc.
- Comments: The power of comments in our code is well-known. In assembly, only single-line comments are supported. These either start with ';' anywhere in a line (beginning or not) or start with '*', but this must be at the very beginning of the line.
- Nested Comments: Often in our code, apart from explaining the program's logic, we add messages, either to ourselves to remember something important we need to do or to others we collaborate with. The extension allows creating such comments. This is done with certain keywords. The supported keywords are NOTE, INFO, TODO, TO-DO, FIXME, FIX-ME, FIXIT, FIX-IT, and BUG. When these tags appear in comments followed by ':', the start of a nested comment is recognized and colored differently. Optionally, the keyword can be followed by '@' and a username (e.g., BUG@eliaschr:) or preceded by a username with '@' (like eliaschr@TODO:). The nested comment continues in all subsequent comment lines, even empty ones, until:
- The keyword followed by #end appears (like NOTE#end), or
- A line of code appears
Δύο ακόμα προσθήκες που έχουν γίνει στο Assembly Extension για CCS-Theia είναι η προσθήκη κάποιων αυτομάτων σχολίων. Πιο συγκεκριμένα, κάθε φορά που ξεκινάμε κάποιο αρχείο το πρώτο πράγμα που είναι καλό να γίνεται είναι η δημιουργία ένός τμήματος σχολίων στην αρχή του, που να περιγράφει το project στο οποίο ανήκει, το τι κάνει κλπ. Έτσι, όταν είναι ενεργοποιημένο το extension και γράψουμε τη λέξη #intro αυτόματα θα εμφανιστούν κάποια σχόλια που με τη χρήση του πλήκτρου tab μπορούμε να πάμε από τμήμα σε τμήμα για να το συμπληρώσουμε. Μπορούμε, λοιπόν, να συμπληρώσουμε το όνομα του project, το ονοματεπώνυμο του δημουργού, την ημερομηνία και κάποια περιγραφή για το αρχείο.
Two more additions made to the Assembly Extension for CCS-Theia are some automatic comments. Specifically, whenever we start a file, the first thing that's good practice is to create a comment section at the beginning describing the project it belongs to, what it does, etc. So, with the extension enabled, when we type #intro, some comments automatically appear, and by using the tab key, we can move from section to section to fill them in. We can thus fill in the project name, the creator's full name, the date, and some description for the file.
Ο δεύτερος τύπος σχολείων που υποστηρίζεται είναι μια εισαγωγή σε κάθε συνάρτηση. Με την πληκτρολόγηση της λέξης #head προστίθεται ένα τμήμα σχολίων για περιγραφή της συνάρτησης στην οποία ανήκει ο ακόλουθος κώδικας. Πιο συγκεκριμένα έχουμε τη δυνατήτα να συμπληρώσουμε μια περιγραφή, ποια είναι η είσοδος και η έξοδος της συνάρτησης, ποιους καταχωρητές χρησιμοποιεί,χρήση της stack, κλπ. Ακολουθεί ένα στιγμιότυπο που δείχνει το εν λόγω τμήμα.
The second type of comments supported is an introduction for each function. By typing #head, a comment section is added to describe the function to which the following code belongs. More specifically, we can fill in a description, what the function's input and output are, which registers it uses, stack usage, etc. Here's a snapshot showing this section.
Συμπεράσματα
Conclusion
Το CCS-Theia είναι ένα πολύ ωραίο περιβάλλον προγραμματισμού των μικροελεγκτών της εταιρίας Texas Instruments. Η συγκεκριμμένη δουλειά έχει γίνει για τις οικογένειες MSP430 και MSP430X και για τον προγραμματισμό τους σε γλώσσα Assembly. Δυστυχώς, πολλοί κατασκευαστές αγνοούν τη δύναμη της assembly και δίνουν μεγάλο βάρος μόνο στις γλώσσες υψηλότερου επιπέδου, όπως C/C++, Python κλπ. Όμως η χρήση ενός μικροελεγκτή πολλές φορές δε δίνει την ευχέρεια σε ένα προγραμματιστή να είναι αρκετά "τεμπέλης", αντιθέτως είναι πολλές οι φορές που η χρήση των πηγών του μικροελεγκτή πρέπει να γίνεται με φειδώ και σύνεση. Είναι αλήθεια πως η δύναμη των σημερινών μικροεπεξεργαστών έχει κάνει τους προγραμματιστές να θεωρούν το optimization κάτι που απλά κάνει ο compiler και η επεξεργαστική ισχύς είναι τέτοια που μπορεί να κάνει τη δημιουργία ενός μη efficient κώδικα να μη φαίνεται. Πάντως η γλώσσα assembly είναι μακριά από το να σταματήσει να χρησιμοποιείται!
CCS-Theia is a very nice programming environment for Texas Instruments' microcontrollers. This particular work was done for the MSP430 and MSP430X families and for programming them in Assembly language. Unfortunately, many manufacturers ignore the power of assembly and place great emphasis only on higher-level languages like C/C++, Python, etc. However, using a microcontroller often doesn't give a programmer the luxury of being too "lazy"; on the contrary, there are many times when the microcontroller's resources must be used sparingly and wisely. It's true that the power of today's microprocessors has made programmers consider optimization something the compiler does, and the processing power is such that creating inefficient code may not be noticeable. However, assembly language is far from being obsolete!
Το εν λόγω extension καλύπτει την ανάγκη δημιουργίας κώδικα σε assembly για τις δύο οικογένειες μικροελεγκτών με επιτυχία, όσον αφορά τη χρωματική σύνταξη και την υποβοήθηση συγγραφής προγραμμάτων στο Code Composer Studio - Theia. Είναι, ελεύθερο να το κατεβάσει ο καθένας και να το χρησιμοποιήσει.
The extension in question successfully covers the need for writing assembly code for the two microcontroller families regarding syntax highlighting and assisting in writing programs in Code Composer Studio - Theia. It's free for anyone to download and use.
Δεν υπάρχουν σχόλια:
Δεν επιτρέπονται νέα σχόλια.