dronecodeのコーディングルールを拝見いたしました。
あまりにもざっくりしていることもあり、保守性や品質まではいき渡っていなさそうと感じています。
そこで、日本には、組み込み系ソフトについて、コーディングルールというのを事細かく定義してるものがあります。
例えば、
・MISRAとか
・IPAの「組込みソフトウェア開発向けコーディング作法ガイド[C++言語版]」や
・凡ミスによる障害の回避ルール
これらのルールをベースにArduCopterのコードの品質を上げていきたい。
また、その過程で、不安なコードがあれば、不安を軽減していきたい。
その情報や修正案などのアップしたいと思い、このディスカッションを立ち上げました。
何卒、よろしくおねがいいたします。
Replies
地道に改善と思われることをPRしています。
直近では、セマフォーを取得できるまで待つ指定で「0」を指定しているソースが多数あります。
その定義「HAL_SEMAPHORE_BLOCK_FOREVER」がされていることがわかりました。
全ソースを検索して、変更して、PRしました。
フランシスコさんにてチェックしていただき、マスターに組み込まれました。
これで、今後、追加されるドライバーでは、「HAL_SEMAPHORE_BLOCK_FOREVER」を使っていただけるかなあ。
Senzai様
コメントありがとうございます。(^^)
ディスカスを意識してみるようにいたします。m(__)m
Goro Senzai said:
STM32マイクロコントローラー系ボード(PX4FMU-V1,V2,V4等)のドライバーを、PX4Firmwareからメインツリーに移して、Linux系のドライバーと統合する作業が進められていますので、そのことかと思います。
11月に入ってからmasterに取り込まれ始めてますので、テストの結果が良好であれば近いうちに切り替えられると思います。
http://discuss.ardupilot.org/t/calling-all-testers-new-ardupilot-se...
murata,katsutoshi said:
libraries/AP_RangeFinder/AP_RangeFinder_PX4.cppの「open_driver」メソッドで同じ語が使われていました。
そこで、その語を共通にたPRをアップしました。
結果は、対応の効果少ないこと、近い将来、対応から外れることから、それでも入れたいですか、とのコメントがありました。
近い将来がいつになるのか、現在、PX4にかかるソースについて除外する作業が進められているようですが。。。
とりあえず、備忘録として、ここに残すことにしました。今後、忘れて、同じPRをしないようにするために。
/*
open the PX4 driver, returning the file descriptor
*/
int AP_RangeFinder_PX4::open_driver(void)
{
if (num_px4_instances == 0) {
/*
we start the px4 rangefinder drivers on demand
*/
const char *strLl40ls = "ll40ls";
if (AP_BoardConfig::px4_start_driver(ll40ls_main, strLl40ls, "-X start")) {
hal.console->printf("Found external %s sensor\n", strLl40ls);
}
if (AP_BoardConfig::px4_start_driver(ll40ls_main, strLl40ls, "-I start")) {
hal.console->printf("Found internal %s sensor\n", strLl40ls);
}
const char *strTrone = "trone";
const char *strStart = "start";
if (AP_BoardConfig::px4_start_driver(trone_main, strTrone, strStart)) {
hal.console->printf("Found %s sensor\n", strTrone);
}
const char *strMb12xx = "mb12xx";
if (AP_BoardConfig::px4_start_driver(mb12xx_main, strMb12xx, strStart)) {
hal.console->printf("Found %s sensor\n", strMb12xx);
}
}
// work out the device path based on how many PX4 drivers we have loaded
char path[] = RANGE_FINDER_BASE_DEVICE_PATH "n";
path[strlen(path)-1] = '0' + num_px4_instances;
return open(path, O_RDONLY);
}
C言語のキャスト形式をC++のキャスト形式(static_castにて)にソースを修正しています。
「nullptr」のPR、取り入れていただきました。
murata,katsutoshi said:
気になっていました。「NULL」指定を「nullptr」に修正してPRしました。結構なファイル修正となりましたので。。。
メンテナーのチェックは大変かと思いますが。。。
ソースの品質を上げるために必要なPRと思っております。
続々とmasterに取り込まれていますね!
私もコード眺めていて、いろいろ気になるところはあるのですが、なかなかPRを出すのは億劫で、、、結局なにもしてません。。。
応援してますので、引き続き頑張ってください!
murata,katsutoshi said:
最近、こちらに活動内容をアップしていませんでした。。。
1。cppcheckツールによるGCCで発見されない未実行処理「return文後のbreak」の削除PR。
2。console出力で、共通文言を変数定義して「%s」で出力するように改善PR。
3。戻り値の値に直値を設定していたので、enum名に修正PR。
Navio2 には、SPIコネクタがありません。
回路図を見た所、すべて使われているのでは感じますが。。。
ホームページを見ても、空きが無いという文言を発見できませんでした。
何卒、ご教示を賜りたくよろしくお願いいたします。
回路図
spidev_testの実施結果