1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

micro:bit での typescriptとC++

Last updated at Posted at 2024-10-29

micro:bitにおけるC++の呼び出し(型変換)

C++の実装時に、型につまづくので、( ..)φメモメモ。

ヒントはここにあります

数値(Numberとint)

Numberとintとは、そのまま相互運用が可能。

数値(Numberとdoubleやfloat)

typescriptのNumberはdoubleの精度を持つ。

Numberは、TNumberに対応しており、double toDouble(TNumber)やfloat toFloat(TNumber)でC++の型に変換し、
TNumber fromDouble(double)やTNumber fromFloat(float)でNumber型に変換する。

typescriptでのテクニック:値が整数であるかどうか

value === (value | 0)

radio.ts での実装例

    export function sendValue(name: string, value: number) {
        let packet: RadioPacket;

        if (value === (value | 0)) {
            packet = RadioPacket.mkPacket(PACKET_TYPE_VALUE);
        }
        else {
            packet = RadioPacket.mkPacket(PACKET_TYPE_DOUBLE_VALUE);
        }

        packet.numberPayload = value;
        packet.stringPayload = name;
        sendPacket(packet);
    }

文字列型の相互変換(StringとManagedString)

StringとManagedStringとを相互に変換するために、MSTR()やPSTR()が使われています。

MSTR() - StringからManagedStringへ変換
PSTR() - ManagedStringからStringへ変換

引数のかず

関数の引数が多すぎると、コンパイルエラーとなる。

error TS9200: Assertion failed
例えば、引数が6個の関数を呼び出すとエラー。

test.ts
custom.buildErr(1, 2, 3, 4, 5, 6)
custom.ts

    //% block
    //% shim=custom::buildErr
    export function buildErr(p1: number, p2: number, p3: number, p4: number, p5: number, p6: number): void {
        // nop
    }
    
custom.cpp

    //%
    void buildErr(TNumber p1, TNumber p2, TNumber p3, TNumber p4, TNumber p5, TNumber p6)
    {
        // nop
    }

マクロの定義(ptx.json)

定数マクロをptx.jsonで定義できる。

Setting C++ constants for DAL config - yotta

pxt.jsonを記述しただけでは、v2(codal)のビルド時にしか、CUSTOM_DEFINE_VALUEが定義されない。

    "yotta": {
        "config": {
            "CUSTOM": 123
        }
    }

YOTTA_CFG_ を接頭辞につける。

#define DEFAULT_CUSTOM 9
#ifndef CUSTOM
#ifdef YOTTA_CFG_CUSTOM
#define CUSTOM YOTTA_CFG_CUSTOM
#else
#define CUSTOM DEFAULT_CUSTOM
#endif
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?