C++(1)-文字列出力

C#であるアプリケーションを作成しようと思いましたが、公開されているライブラリがヘッダファイル、LIB、DLLで構成されていたので、C++を使用してアプリケーションを作成することにしました。開発環境は、Visual Studioを使用します。

まずは、C++言語を使用してアプリケーションを動作させてみようと思います。作成するアプリケーションは、下記のような文字列の出力機能にしようと思います。

  1. Hello world. と出力する。
  2. 何かキーボードが押されるまで、処理を中断する。

「2」の機能を追加しないと、Hellow worldと出力した後、アプリケーションが終了してしまうため、文字列の出力を目視で確認できません。そのために、「2」の機能を追加しています。他にも方法はあると思いますが、今回は「2」の方法を使用しようと思います。

それでは、アプリケーションを構築します。

まずは、新規プロジェクトの作成を行います。メニューより、ファイル、新規プロジェクト作成を選択します。

下記のような画面が表示されるので、テンプレート→全般より、空のプロジェクトを選択、プロジェクト名(任意名)を入力して、OKを選択します。今回は、output_testというプロジェクト名にしました。

プロジェクトが生成されました。

次に、main.cppファイルを新規作成します。ソリューション エクスプローラーのソースファイルフォルダを右クリックして、メニューを開き、追加→新しい項目を選択します。

C++ ファイル(.cpp)を選択、名前(任意名)を入力して、追加ボタンを押します。

main.cppが追加できたので、main.cppにコーディングしていきます。下記は、どちらかというとC言語ですかね。

#include <stdio.h>		// -----------①

int main()
{
	int c;

	printf("Hello world.");
	c = getchar();

	return 0;
}

C++では、下記のようなコーディングもできます。

#include <iostream>	// -----------②

int main()
{
	char str[10];

	std::cout << "Hello world.";
	std::cin >> str;

	return 0;
}

それでは、ビルドして実行してみます。下記のような画面が表示されます。

①の方は何かキーボードを押すとアプリケーションを閉じます。②の方は、何か文字を入力した後、ENTERキーを押すとアプリケーションを閉じます。

2020年10月14日 | カテゴリー : C++ | タグ : , | 投稿者 : prog

C#(13)-CAN通信(PCAN-BASIC API)

今回は、CAN通信を行えるアプリケーションを作成しようと思います。CANは、Controller Area Networkの略称で、ISOにて国際的に標準化されたシリアル通信プロトコルです。1986年ドイツの伝送メーカBOSCH社で自動車向けの通信プロトコルとしてCANを開発しました。今日では、CANの高い性能と信頼性が認められ、用途は多方面にわたっています。

CAN通信を行うために使用するハードウェアは、Peak System社製のPCAN-USBを使用しようと思います。Peak System社より、「PCAN-View」というアプリケーションも提供されているので、PCAN-USBと組み合わせて使用することで、CAN通信を行うこともできます。PCAN-Viewは下記サイトよりダウンロードできます。

https://www.peak-system.com/PCAN-USB.199.0.html?&L=1

下記は、実際にCAN通信を行っているようすです。

PCAN-ViewでもCAN通信はできますが、今回は、C#を使用して、アプリケーションを作成したいと思います。開発環境は、Visual Studioになります。

RX(20)-CRC演算器

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

前回、ブートローダに、アプリケーション領域に書き込み時に計算したCRCチェックサム値と起動時に計算したCRCチェックサム値と比較を行い、アプリケーション領域のコードに誤りがないかチェックする機能を追加しました。

前回の内容は下記のサイトになります。

RX(19)-ブートローダ(CRC16チェックサム)

このチェック機能は、CRC演算器コンポーネントを使用して、機能を構築しました。CRCでどのように計算をしているか今回は考えてみようと思います。

CRCはCyclic Redundancy Checkの略称で、巡回冗長検査と呼びます。通信路上で起きるデータの誤り検出などに使用します。例えば、送信データをあらかじめ定めた生成多項式で除算したあまりを送信データに付加して送信します。この付加したデータがCRC符号です。受信側は同じ生成多項式で除算、あまりを比較することで、受信したデータに誤りがあるかどうか判断します。

「CRC-16」「CRC-16-CCITT」「CRC-32」など生成多項式の種類や長さで
さまざまな方式が見られます。今回は、「CRC-16」に着目したいと思います。

RL78G14(1)-スイッチによるLED点灯

今回は、RL78/G14 Fast Prototyping Boardを購入したので、動作させようと思います。RL78/G14 Fast Prototyping Boardは、高機能なRL78/G14マイコンを搭載し、様々なアプリケーションの試作開発に特化した評価ボードです。E2エミュレータLite相当のエミュレータサーキットを内蔵し、追加のツール無しでプログラムの書き込み/デバッグが可能です。別売りのRL78/G1D BLE Module Expansion Board (RTKYRLG1D0B00000BJ)と組み合わせることで、BluetoothR Low Energy無線通信機能を容易に追加でき、IoTエンドポイント機器の早期試作が可能です。また、Semtech社製 SX1261/SX1262 LoRaRトランシーバを組み合わせることで、LoRaRに基づく無線通信によるIoTセンサデバイスを試作することも可能です。

今回は、動作確認なので、SWを押すとLEDが点灯するような機能を構築して動作させてみようと思います。Bluetooth Low Energy無線通信も次回以降に試していきたいと思います。

それでは機能を構築していきたいと思います。まずは新規プロジェクトの作成です。新規プロジェクトの作成方法は、下記のページを参考にしてください。

RL78G13(1)-SWによるLED点灯

今回は、プロジェクト名を「RL78G14_SW」としました。

RX(19)-ブートローダ(CRC16チェックサム)

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

前回はアプリケーション領域へアプリケーションコードを書き込んでいく処理を作成しました。ブートローダが動作することを確認できたと思います。

前回の内容は下記のサイトになりあます。

RX(18)-ブートローダ(アプリケーションコードの書き込み)

作成したブートローダは、SW1を押さずに実行した場合、アプリケーションコードに移動する仕様ですが、アプリケーション領域に有効なアプリケーションを含んでない場合あると思います。例えば、ブートローダを書き込んだ直後には
アプリケーション領域には何も書き込みはされていません。誤動作する可能性もあるので、アプリケーション領域のチェックをする必要があります。そこでアプリケーション領域に書き込みをした際に、CRC演算をしてアプリケーション領域のチェックサムを求め、コードフラッシュに書き込んでおき、再度電源を投入した際に、アプリケーション領域のチェックサム値を求め、書き込んだチェックサム値と比較することで、アプリケーション領域に有効なアプリケーションを含んでいるか判定しようと思います。

それでは、機能を構築していきたいと思います。

RX(18)-ブートローダ(アプリケーションコードの書き込み)

アプリケーション領域をアップデートするためのファイルの形式はモトローラS形式ファイルになります。こちらはSレコード形式のファイルになります。Sレコードに関しては、下記のページが参考になります。

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

https://ja.wikipedia.org/wiki/S-record

前回は、XMODEMプロトコルを使用して受信したデータ(モトローラS形式ファイル)を解析するための関数を作成しました。前回の内容は下記のサイトになりあます。

RX(17)-ブートローダ(Sレコードファイルデコード)

今回は、前回作成したモトローラS形式ファイルを解析する関数を呼び出しながら、アプリケーション領域へアプリケーションコードを書き込んでいく処理を作成します。これで、ブートローダが動作すると思います。

それでは、コーディングしたいと思います。

RX(17)-ブートローダ(Sレコードファイルデコード)

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

前回は、XMODEMプロトコルを使用して、受信したデータを、バッファに保存する処理を行いました。

前回の内容は下記のサイトになります。

RX(16)-ブートローダ(XMODEMプロトコルデータ受信処理)

アプリケーション領域をアップデートするためのファイルの形式はモトローラS形式ファイルになります。こちらはSレコード形式のファイルになります。Sレコードに関しては、下記のページが参考になります。

https://ja.wikipedia.org/wiki/S-record

今回は、XMODEMプロトコルを使用して受信したデータ(モトローラS形式ファイル)を解析する処理になります。これらを処理するための関数を作成していきます。

それでは、コーディングしたいと思います。

RX(16)-ブートローダ(XMODEMプロトコルデータ受信処理)

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

アプリケーションコードを書き込むためには、まずは、書き込み領域を削除しなければなりません。前回は、Erase処理をブートローダの機能に追加しました。

前回の内容は下記のサイトになります。

RX(15)-ブートローダ(アプリケーション領域削除)

今回からは、アプリケーションコードのアップデート処理をブートローダに追加しようと思います。下記の機能を追加します。このアップデートの処理ですが、コーディングすると長いので何回かに分割してコーディングしていきたいと思います。今回は、主にXMODEMプロトコルを使用して、受信したデータを、バッファに保存する処理になります。

XMODEMプロトコルに関しては、下記のページが参考になると思います。

https://ja.wikipedia.org/wiki/XMODEM

それでは、コーディングしたいと思います。

RX(15)-ブートローダ(アプリケーション領域削除)

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

前回は、下記の機能をコーディングしました。

  • 各種初期化関数
  • 電源投入時に、SW1が押されてなかったら、指定した番地に移動(アプリケーションコードへ移動)
  • 割り込みベクターテーブルをRAMへ保存

前回の内容は下記のサイトになります。

RX(14)-ブートローダ(アドレス移動)

アプリケーションコードを書き込むためには、まずは、書き込み領域を削除しなければなりません。今回は、Erase処理をブートローダの機能に追加しようと思います。それでは、コーディングしたいと思います。

RX(14)-ブートローダ(アドレス移動)

現在、RXマイコンを使用して、ブートローダ機能を構築に取り組んでいます。使用するマイコンは、「RX66T」になります。「Renesas Starter Kit+ for RX66T」評価ボードを使用しています。開発環境は「e2studio」です。

前回は、下記のエラーが発生したので、その対応方法を検証しました。

  • W0561120:Section address is not assigned to “RPFRAM”
  • F0563100:Section address overflow out of range : “RPFRAM”

前回の内容は下記のサイトになります。

RX(13)-ブートローダ(RPFRAM)

今回は、ブートローダの処理をコーディングしたいと思います。今回コーディングする内容は下記の通りです。

  • 各種初期化関数
  • 電源投入時に、SW1が押されてなかったら、指定したアドレスに移動(アプリケーションコードへ移動)
  • 割り込みベクターテーブルをRAMへ保存

今回、指定したアドレスに移動する機能も構築するので、LEDを点滅する関数を作成してその関数へ移動するかどうか試してみたいと思います。

それでは、コーディングしたいと思います。