10
votes

Quel ensemble de compétences doit-il posséder un programmeur de faible niveau?

Je suis un ingénieur SW intégré, avec moins de 3 ans d'expérience. Je vise à "aiguiser la scie" en continu. Je me demandais s'il y avait quelque chose de spécifique à la programmation de bas niveau que les codeurs C / C ++ doivent être compétents.

Qu'est-ce qui me vient à l'esprit est la familiarité avec l'architecture et l'instruction du matériel. Sachant comment violer des bits est également important, la gestion des ressources et la performance font partie de mon travail, y a-t-il autre chose?

Edit: Je travaille avec une RTO personnalisée interne, non embarqué Linux.


0 commentaires

9 Réponses :


9
votes

J'étudierais l'électronique des copeaux réelles. Découvrez comment ils fonctionnent en interne (tels que l'architecture), l'interface avec les périphériques, les caractéristiques de l'électricité et du calendrier, etc.

Fondamentalement, lisez la fiche de données Commencez à terminer quelques fois et creuser dans tout ce que vous n'avez pas vu / utilisé avant.

Au fait, quelles jetons travaillez-vous?


2 commentaires

D'accord. En savoir plus sur les aspects d'ingénierie électrique / électronique des ordinateurs!


Je travaille avec le Arm9 pour le contrôleur et le C55 pour DSP, également aidé à écrire des pilotes pour différents types de RF, Ad / Da et Power Amp ICS.



3
votes

Avoir une grande connaissance des pointeurs, les chèques que ces langues ne font pas grand chose (comme le débordement de la mémoire tampon et des trucs comme ça), électronique numérique. Les systèmes opérationnels opérationnels peuvent également aider.

Apprenez à savoir comment des produits sont représentés en interne, des structures de données spécialement prêtes à l'emploi (supposant que vous ne construisez pas votre propre).

Surtout, pratiquez beaucoup. Le faire apporte beaucoup plus à vous que de simplement lire à ce sujet;)


0 commentaires

4
votes

Si vous n'avez pas encore je pense que chaque ingénieur logiciel doit lire le programmateur et le code pragmatique complet. Je sais que ce ne sont pas spécifiques à la programmation à faible niveau, mais ont une vaste richesse de connaissances qui s'appliquent à toutes les sous-disciplines.


2 commentaires

J'ai ces livres et les lis. Je pense qu'ils sont tous les deux grands.


pratiques d'un développeur agile est une sorte de suite à le programmeur pragmatique et est aussi un très bon livre.



11
votes

concepts spécifiques comme,

  1. Endianness (ce lien est d'un article ancien mais bon linuxjournal)
  2. Utilisation efficace des architectures multithreading (le site intégré est bon en général) < / li>
  3. Débogage incorporé et Multhreaded Systems
  4. comprendre, apprendre et suivre de bonnes techniques de programmation (le lien est très vieux et le point très générique et subjectif, mais réfléchissez-y)
  5. Autres choses (cette page IBM sur les résous Linux incorporés La plupart des autres points que je veux faire)
  6. Une autre chose - Ne sous-estimez jamais les tests ! Ou, planification des cas de test !!

    Utilisez les liens de référence que je donne comme concepts,
    S'il vous plaît suivi plus loin pour les connaissances plus profondes.


6 commentaires

Oui tatft. Si vous ne savez pas ce que cela signifie, regardez-le et vivez-le!


@Brian, vous pariez! Je me suis coupé pour avoir manqué celui-là.


Je viens d'apprendre ce que Tatft se tenait et rit fort dans ma cabine, je suis totalement d'accord, en fait, nous sommes toujours tatoués dans mon équipe et les sourcils sur ces groupes qui ne le font pas.


Cela suppose que l'utilisateur utilise un système RTO ou un autre système d'exploitation intégré qui n'est pas une hypothèse que je produirais, certainement pas embarqué Linux qui est un oxymoron. Ce sont de bonnes choses de haut niveau à vous inquiéter mais pas de faible niveau


La question mentionne l'ingénierie logicielle intégrée et l'importance perçue de l'architecture matérielle et de l'ISA. J'avais cela à l'esprit tout en énumérant des points.


@dwelch, j'ai lu vos points et je suis d'accord avec eux. Si vous regardez les points de ma réponse (et peut-être éteindre sur les articles un peu), vous conviendrez probablement que cette approche de haut niveau vers l'ingénierie de bas niveau vous permettra d'écrire le type de points que vous énumérez.





1
votes

Obtenez vous-même une copie du Livre MISRA-C . Il a été écrit à l'origine par des membres de l'industrie automobile et tente de rendre des logiciels écrits dans C plus robustes en appliquant un numéro (un nombre assez grand!) De règles et de directives.

Puis, achetez PC-Lint (ou un autre outil d'analyse statique) pour vérifier votre code pour MISRA et Autres règles.

Celles-ci sont particulièrement pertinentes pour les C de faible niveau et intégrées, comme entre eux, ils traitent des causes de nombreux bugs dans ces logiciels, tels que des problèmes liés aux pointeurs, aux fuites de mémoire, à une promotion entière (il y a un chapitre entier sur que dans le livre MISRA), l'endansité et le comportement indéfini.


0 commentaires

13
votes

Je vois que beaucoup de réponses de système d'exploitation de haut niveau ici, mais vous avez spécifiquement dit de faible niveau.

Certaines pensées dispersées:

  • Conception pour test. Lorsque vous travaillez à travers un problème, changez une chose à la fois par test.
  • Vous devez comprendre des bus et des interfaces, SPI, I2C, USB, Ethernet, etc. Numéro une interface, aujourd'hui, hier, et demain, le UART, série.
  • Les étapes impliquées dans la programmation d'un flash.
  • astuces pour éviter de rendre le produit facilement briquetble.
  • BootLoaders en général.
  • bit-frapper au-dessus desdites interfaces sur diverses familles de pièces (différentes puce Les fournisseurs ont des idées différentes sur les épingles IO, les tractions, la direction Contrôles, etc.).
  • Le tableau et la puce montrent, vous ne voulez certainement jamais démarrer plusieurs dizaines de milliers de lignes de programme de code sur le premier Mise sous tension (pensez à mené sur, mené).
  • Comment déboguer un produit sans utiliser de trop d'équipements de test (analyseurs logiques et étendues), dans le même temps, vous devez apprendre à utiliser une étendue de débogage, vous êtes loin plus de valeur si vous n'avez pas besoin d'avoir une technologie ou un ingénieur dans le laboratoire avec vous.
  • Comment reprogrammeriez-vous l'unité sur le terrain? Quel serait vous faites pour minimiser les erreurs humaines lorsque vous permettez à l'utilisateur de champ améliorer l'appareil? N'oubliez pas que les dégradations de terrain aussi.
  • Que feriez-vous pour décourager le piratage (binaires, etc.).
  • Utilisation efficace du flash / ROM (ne portez pas une banque ou une section, répartissez l'usure, ou voyez si le flash le fait pour vous).
  • Comment et quand utiliser une minuterie de surveillance.
  • Machines d'état, très utiles avec des bytestreams (série et Ethernet), des structures de paquets de conception qui se développent bien et sont adaptées à une machine à états et qui ont une en-tête et une scrupule de contrôle ou une autre structure qui vous assure ne pas interpréter les paquets partiels ou données aléatoires comme un bon paquet.

4 commentaires

Bon post. J'ajouterais que lorsque vous construisez des applications embarquées, vos capacités de débogage sont moins nombreuses et que la conception de la conception devient absolument nécessaire beaucoup plus que dans des environnements amicaux lorsque vous êtes de la boite de sable et vous n'allez pas ruiner le code ailleurs. De plus, à basculer sur le mauvais bit ou la déséroférance Un pointeur pendling a des conséquences réelles ici, contrairement à la programmation de bureau où le pire que vous obtenez est un crash de programme. Programme de manière défensive, même lorsque vous ne voyez pas de forte besoin de.


Oui, programme de manière défensive, j'aime ce terme. Sachez également quand aller contre la norme comme plus de variables globales et moins de locaux. Ne présumez pas toujours que .bs et .data ont été configurés (parce que vous ne l'avez pas fait) et avez choisi une alternative. Gestion de l'alimentation, de plus en plus de choses courent des piles. Il faut moins de puissance pour stocker un 1 dans une ROM que 1 0. Enregistrer sur NV RAM lorsque la puissance est supprimée. Réveillez-vous, manipulez l'événement, retourner en mode basse puissance.


Si vous ne pouvez pas lire un schéma, apprenez. Les mêmes choses vont pour les feuilles de données et la même chose pour la lecture de Verilog et de VHDL. Selon le projet, vous n'allez essentiellement à obtenir un manuel de référence de programmeurs de programmeurs bon ou précis, le schéma et la portée montreront où les signaux sont et le Verilog / VHDL vous indiquera ce que font la logique de vos collègues d'ingénieurs.


C'est une bonne liste. Je pense que les votes debout viendront plus facilement si vous reformaté cela pour le rendre plus lisible. Les balles seraient un bon endroit pour commencer - c'est une liste (non ordonnée), après tout.



1
votes

bonne question. Certains qui n'ont pas été mentionnés ...

Apprenez vos différentes options pour atteindre le multitâche de bas niveau. Des planificateurs de base rond-robine (non préventifs), avec des ticks de timing à partir d'une minuterie matérielle, jusqu'à un RTO préventif. Apprenez pourquoi vous pourriez avoir besoin d'une RTO et pourquoi vous pourriez ne pas. Si vous utilisez un RTO, apprenez que les débutants avec un fond de PC ont probablement tendance à créer trop de tâches.

Obtenir la visibilité dans les internes pour le débogage peut être un défi. Il n'y a pas d'écran typiquement, donc pas de lancer des appels "Printf" où que vous soyez. Un émulateur ou une interface JTAG est idéal - vous pouvez définir des points d'arrêt et traverser votre programme (aussi longtemps que l'arrêt du micro ne fait pas de matériel de travail, comme balancer un bras de robot à pleine vitesse!). Si l'émulateur / JTAG n'est pas disponible, apprenez à utiliser un port série de rechange (ou peut-être même bit-bash une goupille pour créer un port série) pour un canal de débogage, avec quelques commandes simples de la mémoire / POKE.


0 commentaires