マイコンで書く言語はCとC++どちらがいいか

プログラム言語は多々あれど、どれにしようか迷う人。

アセンブラはさすがに可読性の問題があるので、普通のコードはCがいいと思う。マイコンではよくサンプルコードとして出てきます。ただ、Cのコードは移植性が非常に悪い。移植性が必要な場合は規約がきちんとしていないとまともに動きません。で、まともに動いたと見せかけてずっと使っているとなんだか変な動きをしたりします。
アセンブラを見やすくしたという程度の認識ですね。
綺麗に書こうと努力しますが、行数が増えて来ると結局文字列の羅列になって、何が何だかわからないソースになります。

Cにオブジェクト指向を加えたもの。基本的にCとコンパチです。
マイコンコンパイラはだいたいC++にも対応します。MSP430やH8等、ローエンドのマイコンでも動きます。

C++で書くときにはコード入力支援機能が充実していることが必須です。
これのあるなしで、コード生産性とやる気が全然違います。(コード入力支援とは、Ctrlスペースで書こうとしているコードの候補を表示する機能です)
eclipseという環境がこの頃は充実して来ました。ARMのDS5やTIのCode Composer Studioは有名です。eclipseベースの開発環境によるコード入力支援は非常に強力で、Visual Studio等と比較しても全く遜色ないレベルにあります。

C++の最大の利点はオブジェクト指向を最大限活用した再利用性と可読性の高いコードです。
行数が多いコードほどその利点は大きくなります。
一般には1000行を超えた辺りからCでのコード記述は辛くなって来ます。これを超えるようならばC++による記述をお勧めします。

どれくらいのアプリケーションで超えるかと言うと一概には言えませんが、例えばWi-Fi通信やbluetooth通信をやろうとするとそれだけで軽く1000行は超えます。WIZNETによるTCPIP通信でも超えるでしょう。
UARTで連続的にPCにデータを送るだけならば超えませんが、受信してコマンド解析、処理、レスポンスという流れを作ると超える場合もあるでしょう。

C++で記述する場合にはnewlib問題がよく起こります。
newで動的にメモリ確保するとビルドエラーが発生するというものです。
純粋仮想関数もこの制約で使えません。

しかし、これはプログラムを工夫すると大して問題がないとわかります。
newの代わりにstaticやグローバル変数で取ればいいだけです。
最初から確保されるアドレスが決まっているため、メモリ確保に失敗することがありません。

C++ではRAM等のリソースの消費が激しいイメージがありますが、これもコードの工夫だけです。
stringとかvectorとか、見るからにリソースを消費しそうな機能を使わず、RAMの消費を極力抑えるように心がけて記述していけば大きな問題にはなりません。