{"id":78,"date":"2010-07-20T20:22:00","date_gmt":"2010-07-20T18:22:00","guid":{"rendered":"http:\/\/www.martoni.fr\/wordpress\/?p=78"},"modified":"2010-07-20T20:22:00","modified_gmt":"2010-07-20T18:22:00","slug":"tabulation-code-c-et-driver-linux","status":"publish","type":"post","link":"http:\/\/www.fabienm.eu\/wordpress\/2010\/07\/20\/tabulation-code-c-et-driver-linux\/","title":{"rendered":"Tabulation code C et driver linux"},"content":{"rendered":"<p>Rhaa les tabulations, voici un probl\u00e8me qui est vraiment prise de t\u00eate quand on code diff\u00e9rents logicields en m\u00eame temps. Selon les r\u00e8gles de codage les tabulations sont interdites et doivent \u00eatre remplac\u00e9es par 2, 4 ou 8 espaces, dans d&rsquo;autres projets les espaces sont quasiment interdit et tous les espacements doivent \u00eatre fait avec des tabulations, il faut du coup r\u00e9gler sont \u00e9diteur de texte pour afficher les tabulations avec 4 espaces ou 8 espaces, \u2026<\/p>\n<p>Le tout toujours cod\u00e9 dans le m\u00eame langage (C) bien s\u00fbr, donc difficile de r\u00e9gler sont \u00e9diteur pour s&rsquo;adapter en fonction du projet.<\/p>\n<p>C&rsquo;est particuli\u00e8rement le cas dans le projet <a href=\"http:\/\/www.armadeus.com\/wiki\/index.php?title=Main_Page\">ARMadeus<\/a>, puisque les applications ne doivent pas comporter de tabulation et tous les d\u00e9calages doivent \u00eatre fait avec 4 espaces. Alors que le code Kernel (Linux donc en C) condamne presque les espaces et ne doit comporter que des tabulations affich\u00e9es avec 8 espaces dans l&rsquo;\u00e9diteur de texte.<\/p>\n<p>Heureusement avec vim il y a moyen de s&rsquo;en sortir avec un petit truc sachant que tous fichier C se rapportant au Kernel dans le projet ARmadeus est toujours contenu dans un r\u00e9pertoire \/linux. Le code source officiel linux est dans un r\u00e9pertoire du type :<\/p>\n<p><code>buildroot\/project_build_armv4t\/apf9328<strong>\/linux<\/strong>-2.6.29.6\/drivers\/*<\/code><\/p>\n<p>Alors que le code des drivers kernel sp\u00e9cifique au projet ARMadeus sont dans un r\u00e9pertoire du type :<\/p>\n<p><code>target<strong>\/linux<\/strong>\/modules\/<\/code><\/p>\n<p>On a de forte \u00abchance\u00bb pour que le code se rapportant \u00e0 une application ne soit pas contenu dans un r\u00e9pertoire commen\u00e7ant par \/linux. Par exemple, la librairie as_devices se trouve dans le r\u00e9pertoire :<\/p>\n<p><code>target\/packages\/as_devices\/c\/<\/code><\/p>\n<p>Qui ne contient pas \/linux. Il suffit donc de regarder si le mot \/linux se trouve dans le PATH au moment de l&rsquo;ouverture du fichier pour adapter les tabulations correctement. Ce qui peut \u00eatre fait en ajoutant quelque lignes \u00e0 son fichier .vimrc :<\/p>\n<p><code><br \/>\nfunction ARMadeusCodingRules()<br \/>\n\" tab with space<br \/>\nset tabstop=4<br \/>\nset softtabstop=4<br \/>\nset shiftwidth=4<br \/>\nset smarttab<br \/>\nset expandtab<br \/>\nendfunction<\/code><\/p>\n<p>function Kernel()<br \/>\n:set tabstop=8<br \/>\n:set softtabstop=8<br \/>\n:set shiftwidth=8<br \/>\n:set nosmarttab<br \/>\n:set noexpandtab<br \/>\nendfunction<\/p>\n<p>function SetKernelIndent()<br \/>\nlet filepath = expand( \u00ab\u00a0%:p\u00a0\u00bb )<br \/>\nif match(filepath,\u00a0\u00bb\\\/linux\u00a0\u00bb) != -1<br \/>\n\u00a0\u00bb if subdirectory contain \/linux* then indent Kernel<br \/>\n:call Kernel()<br \/>\nelse<br \/>\n\u00a0\u00bb else ARMadeus coding rules<br \/>\n:call ARMadeusCodingRules()<br \/>\nendif<br \/>\nendfunction<\/p>\n<p>Voila de quoi \u00e9viter bien des prises de t\u00eate au moment des commits de code avec le responsable du projet \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rhaa les tabulations, voici un probl\u00e8me qui est vraiment prise de t\u00eate quand on code diff\u00e9rents logicields en m\u00eame temps. Selon les r\u00e8gles de codage les tabulations sont interdites et doivent \u00eatre remplac\u00e9es par 2, 4 ou 8 espaces, dans &hellip; <a href=\"http:\/\/www.fabienm.eu\/wordpress\/2010\/07\/20\/tabulation-code-c-et-driver-linux\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,11],"tags":[57,58,61,60,19,143,62,59,12],"class_list":["post-78","post","type-post","status-publish","format-standard","hentry","category-informatique","category-programmation","tag-armadeus","tag-c","tag-geek","tag-kernel","tag-linux","tag-programmation","tag-systemes-embarques","tag-tabulation","tag-vim"],"_links":{"self":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/78","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=78"}],"version-history":[{"count":1,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/78\/revisions"}],"predecessor-version":[{"id":79,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/posts\/78\/revisions\/79"}],"wp:attachment":[{"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=78"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=78"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fabienm.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=78"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}