2012年12月13日木曜日

NMEAからDegreeへの変換

USBホストでGPSドングリのGT730FLからの受信をしていたが意外とスタックの使用量が多かった。
調べてみたらDegree形式に変換するためのatof()が300バイト以上消費しているようだった。
atoi()を使うだけに書きなおした。(NMEAが少数点以下4桁以内を前提にしている)

float DMMtoDegree(const char *s)
{
    char *p = strchr(const_cast<char*>(s), '.');
    if (p == NULL) {
        return 0.0;
    }
    const uint32_t k[] = {10000,1000,100,10,1};
    uint32_t i3 = atoi(p+1) * k[strlen(p+1)];
    uint32_t i2 = atoi(p-2);
    uint32_t i1 = atoi(s) / 100;

    uint32_t i = i1*10000*60 + (i2*10000 + i3);
    return i / 10000.0 / 60.0;
}

(2012/12/13)
---

0 件のコメント: