ArduPilotは「組み込みソフト」、だったら保守性や品質をあげていきたい。

dronecodeのコーディングルールを拝見いたしました。

あまりにもざっくりしていることもあり、保守性や品質まではいき渡っていなさそうと感じています。

そこで、日本には、組み込み系ソフトについて、コーディングルールというのを事細かく定義してるものがあります。

例えば、

・MISRAとか

・IPAの「組込みソフトウェア開発向けコーディング作法ガイド[C++言語版]」や

・凡ミスによる障害の回避ルール

これらのルールをベースにArduCopterのコードの品質を上げていきたい。

また、その過程で、不安なコードがあれば、不安を軽減していきたい。

その情報や修正案などのアップしたいと思い、このディスカッションを立ち上げました。

何卒、よろしくおねがいいたします。

Views: 3344

Replies to This Discussion

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);
}

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);
}

地道に改善と思われることをPRしています。

直近では、セマフォーを取得できるまで待つ指定で「0」を指定しているソースが多数あります。

その定義「HAL_SEMAPHORE_BLOCK_FOREVER」がされていることがわかりました。

全ソースを検索して、変更して、PRしました。

フランシスコさんにてチェックしていただき、マスターに組み込まれました。

これで、今後、追加されるドライバーでは、「HAL_SEMAPHORE_BLOCK_FOREVER」を使っていただけるかなあ。

RSS

© 2017   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service