Renesas RX65N/RX72N Envision Kit GUI サンプル
=========
<img src="../docs/gui_sample.jpg" width="50%">
[Japanese](READMEja.md)
## 概要
- C++ GUI フレームワークを利用したサンプル
- GUI のレンダリングは、ソフトウェアー、又は、DRW2D エンジンを選択出来ます。
- ソフトウェアーレンダラーでは、プラットホームを選びません。
- 基本的な GUI フレームワークの利用方法や、操作に対する考え方が判ります。
- GUI を使ったアプリを開発する場合の要領が判ります。
## プロジェクト・リスト
- main.cpp
- RX65N/Makefile
- RX72N/Makefile
## GUI サンプルの機能
- ボタン「Button」
- ボタン「Active」
- チェックボックス
- ラジオボタン
- 水平スライダー
- 垂直スライダー
- メニュー(ItemA, ItemB, ItemC, ItemD)
- テキスト(自動スクロール)
- テキストボックス(垂直アライメント:センター)
各動作:
- 各 widget を操作すると、シリアル出力で、対応する文字列を出力します。
- 「Button」を押す度に、「Active」ボタンの状態が変化します。(ストール -> 許可)
- チェックが有効になると、ラジオボタンの描画色を「白」にする。
- ラジオボタンを操作すると、それに応じて、描画色が変化(Red, Green, Blue)
- text widget には、表示領域より大きい文字列を登録してあり、それが自動でスクロールします。
---
## C++/GUI フレームワークの特徴
- 基本的に C++17 準拠で実装されています。
- GNU RX 8.3.0 以降でコンパイル可能。
- GUI の配置ツールなど、他のアプリを連携しない。(これはデメリットと感じる方もいます)
- MIT ライセンスでソースコードの全てが公開されているので、改造や拡張が自由に出来る。
- あまり複雑な場面より、単純な場面を想定して設計されている為、扱うのが簡単。
- 複雑な操作を行う GUI を実装する事も可能な自由度がある。
- リアルタイム処理にマッチするよう、画面描画を同期式で行っており、FreeRTOS などを使わなくても描画間隔の制御が簡単。
- もちろん、FreeRTOS を使う場合でも問題なく利用できる。
- C++ の機能を使って、より良い方法で実装が出来る。
GUI のアプリケーションを作成する場合、最初のハードルは、部品(Widget)のデザインや配置です。
デザインに関しては、角をラウンドさせたシンプルなデザインを採用しており、プリミティブの合成により描画させています。
※ビットマップデータでは無いので、柔軟性があります。
constexpr を積極利用する事で、配置の問題はかなり柔軟に対応出来ます。
デザインに関しては、初期の段階で標準的なデザインを持った Widget(ボタン、スライダー、チェックボックスなど)を用意してありますので、当面は困らないと思います。
もし、異なったデザインが必要なら、ビットマップ画像を利用する事も出来るし、既存のクラスをコピーして自分の気に入るデザインの部品を作る事も可能です。
GUI のデザインツールや配置ツールは、かなり複雑な場合は必要かもしれませんが、携帯機器のように限られたサイズの液晶向けアプリケーションでは、あまり必要性を感じないと思います。
又、そのようなツールを使う場合、そのツールが出力する中間ファイルなどの扱いが微妙で、ソースコードと隔離されてしまい、将来的に保守をする場合に、問題が発生する事になりますし、ソースコードの保守を難しくします。
## widget の基本的な使い方
RX65N/RX72N Envision Kit についての解説ですが、他のハードウェアーでも同じように利用できるように工夫した構造と構成になっています。
画像表示機能が無いマイコンで利用する場合には、メインメモリをフレームバッファとしてアロケートし、それを LCD に転送するような方法が必要です。
RX マイコンの場合、DMAC があるので、それらを利用する事で、同じような構成にする事が出来ると思います。
---
### RX65N/RX72N 描画ハードウェアー定義と設定
RX65N/RX72N では、LCD に表示を行うハードウェアー(GLCDC)を内蔵しており、その設定を行う事で簡単に表示環境を構築出来ます。
基本的に、ドットクロック、画素データ、水平同期信号、垂直同期信号を生成します。
以下の例は、RX65N/RX72N Envision Kit に搭載された LCD の表示設定を行うものです。
```
// LCD 定義
static const int16_t LCD_X = 480;
static const int16_t LCD_Y = 272;
static const auto PIX = graphics::pixel::TYPE::RGB565;
#if defined(SIG_RX65N)
// GLCDC 関係定義
typedef device::PORT<device::PORT6, device::bitpos::B3> LCD_DISP;
typedef device::PORT<device::PORT6, device::bitpos::B6> LCD_LIGHT;
static const uint32_t LCD_ORG = 0x0000'0100;
#elif defined(SIG_RX72N)
// GLCDC 関係定義
typedef device::PORT<device::PORTB, device::bitpos::B3> LCD_DISP;
typedef device::PORT<device::PORT6, device::bitpos::B7> LCD_LIGHT;
static const uint32_t LCD_ORG = 0x0080'0000;
#endif
// GLCDC 関係リソース
typedef device::glcdc_mgr<device::GLCDC, LCD_X, LCD_Y, PIX> GLCDC;
GLCDC glcdc_(nullptr, reinterpret_cast<void*>(LCD_ORG));
...
{ // GLCDC の初期化
LCD_DISP::DIR = 1;
LCD_LIGHT::DIR = 1;
LCD_DISP::P = 0; // DISP Disable
LCD_LIGHT::P = 0; // BackLight Disable (No PWM)
if(glcdc_.start()) {
utils::format("Start GLCDC\n");
LCD_DISP::P = 1; // DISP Enable
LCD_LIGHT::P = 1; // BackLight Enable (No PWM)
if(!glcdc_.control(GLCDC::CONTROL_CMD::START_DISPLAY)) {
utils::format("GLCDC ctrl fail...\n");
}
} else {
utils::format("GLCDC Fail\n");
}
}
```
- LCD_DISP は、LCD 表示を「有効/無効」にする制御ポートです。
- LCD_LIGHT は、バックライトの「ON、OFF」です。
- glcdc_mgr クラスは、内部で、480x272 サイズの液晶用パラメータをハードコードしており、他のサイズ液晶を定義する場合、パラメータを修正する必要があります。
- この構造は良くありませんので、将来的には改善する予定です。
```
//
// Definition of LCD for 480x272 LCD by 60Hz
//
// Horizontal cycle (whole control screen) 529
// Vertical cycle (whole control screen) 315
// Horizontal Synchronization Signal Assertion Position
cfg.output.htiming.front_porch = 8;
// Vertical Synchronization Assertion Position
cfg.output.vtiming.front_porch = 10;
// Horizontal Active Pixel Start Position (min. 6 pixels)
cfg.output.htiming.back_porch = 39;
cfg.output.vtiming.back_porch = 32;
// Horizontal Active Pixel Width
cfg.output.htiming.display_cyc = XSIZE;
// Vertical Active Display Width
cfg.output.vtiming.display_cyc = YSIZE;
// Vertical Active Display Start Position (min. 3 lines)
cfg.output.htiming.sync_width = 2;
cfg.output.vtiming.sync_width = 1;
```
---
### 描画リソースの定義と設定
描画を行うリソースとして、ビットマップフォントを設定する必要があります。
```
// フォントの定義
typedef graphics::font8x16 AFONT;
// for cash into SD card /kfont16.bin
// typedef graphics::kfont<16, 16, 64> KFONT;
typedef graphics::kfont<16, 16> KFONT;
typedef graphics::font<AFONT, KFONT> FONT;
AFONT afont_;
没有合适的资源?快使用搜索试试~ 我知道了~
Renesas RX微控制器、C++ 框架、库、示例_C++_代码_相关文件_下载
共1631个文件
hpp:451个
h:320个
c:198个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 14 浏览量
2022-07-07
02:45:16
上传
评论
收藏 41.21MB ZIP 举报
温馨提示
瑞萨 RX 微控制器 概述 这是 Renesas RX 微控制器及其编译器 rx-elf-gcc, g++ 的程序。 我目前使用 Renesas GNU-RX gcc 8.3.0 作为我的主要开发工具。 目前,已经实现了一个专门的编写程序,已经在 Windows、OS-X 和 Linux 上进行了测试。 现在可以在多种环境中进行开发。 目前支持和测试的设备有 RX24T、RX66T、RX72T、RX64M、RX65N、RX71M、RX72N。 我每天都扩展设备类。 计划在未来支持 RX72M。 我每天更新它,包括目录配置。 目前不支持 RX62N(RX621) 和 RX63T。(它在 LEGACY 文件夹中。) 项目由 Makefile、相关头文件、源代码、专用启动它由例程和链接器脚本组成。 具有模板设计模式的设备控制类提供了灵活而简洁的功能。 由于其功能性,它不需要通过单独的程序进行困难或复杂的设置或代码生成。 更多详情、使用方法,请下载后阅读README.md文件
资源推荐
资源详情
资源评论
收起资源包目录
Renesas RX微控制器、C++ 框架、库、示例_C++_代码_相关文件_下载
(1631个子文件)
libgmp.a 762KB
libmpfr.a 615KB
libpng.a 193KB
libjpeg.a 125KB
libmad.a 112KB
libdrw2d.a 110KB
libz.a 91KB
DSO_LTspice.asc 2KB
AUTHORS 1KB
kfont16.bin 244KB
kfont12.bin 137KB
HRC_logo_s.bmp 84KB
BUGS 3KB
ffunicode.c 1.88MB
ff.c 242KB
tasks.c 222KB
FreeRTOS_TCP_IP.c 181KB
FreeRTOS_Sockets.c 181KB
r_usb_hhubsys.c 133KB
r_usb_hmsc_driver.c 131KB
FreeRTOS_IP.c 129KB
r_usb_creg_access.c 126KB
queue.c 123KB
FreeRTOS_TCP_WIN.c 100KB
r_usb_hmanager.c 94KB
r_usb_hdriver.c 90KB
FreeRTOS_DNS.c 90KB
tcp.c 87KB
r_socket.c 87KB
tcp.c 78KB
dhcp.c 74KB
r_usb_usbif_api.c 71KB
dave_context.c 70KB
r_usb_dma.c 67KB
r_usb_pdriver.c 63KB
r_usb_hlibusbip.c 61KB
r_usb_pstdrequest.c 60KB
picojpeg.c 57KB
mpu_wrappers.c 56KB
nes6502.c 56KB
FreeRTOS_DHCP.c 54KB
stream_buffer.c 52KB
timers.c 49KB
dave_line.c 47KB
dave_texture.c 46KB
dave_dlist.c 45KB
dave_rbuffer.c 45KB
r_usb_hhid_driver.c 45KB
dave_render.c 44KB
r_usb_plibusbip.c 43KB
r_ether.c 43KB
dave_driver.c 42KB
r_usb_rx_mcu.c 40KB
r_usb_hreg_access.c 39KB
FreeRTOS_ARP.c 38KB
r_usb_hreg_abs.c 38KB
r_usb_cstd_rtos.c 36KB
r_usb_hstorage_driver.c 36KB
nes_ppu.c 35KB
tcp_api.c 34KB
udp.c 31KB
r_usb_cdataio.c 31KB
event_groups.c 31KB
nes_apu.c 31KB
r_usb_preg_abs.c 28KB
dave_edge.c 27KB
dave_blit.c 27KB
igmp.c 25KB
ether.c 25KB
libsnss.c 22KB
port.c 21KB
heap_5.c 21KB
r_usb_clibusbip.c 20KB
udp.c 20KB
r_usb_hscheduler.c 20KB
phy.c 20KB
r_usb_hcontrolrw.c 19KB
r_socket_par_check.c 19KB
heap_4.c 19KB
tcp_api.c 19KB
FreeRTOS_UDP_IP.c 19KB
ether.c 19KB
r_usb_creg_abs.c 18KB
dave_quad.c 17KB
dave_polyline.c 17KB
dave_box.c 16KB
dave_utility.c 16KB
croutine.c 16KB
nes.c 16KB
r_byteq.c 15KB
r_dhcp_client.c 15KB
syscalls.c 15KB
ip.c 15KB
r_usb_hintfifo.c 15KB
nesstate.c 14KB
dave_irq_rx.c 14KB
nes_rom.c 14KB
dave_triangle.c 14KB
dave_64bitoperation.c 13KB
port.c 13KB
共 1631 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
资源评论
- 天靓星2024-06-05超赞的资源,感谢资源主分享,大家一起进步!
- qq_517348452024-04-01资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
- m0_741135972023-07-24这个资源内容超赞,对我来说很有价值,很实用,感谢大佬分享~
- 寂寞读南华2022-11-01非常有用的资源,可以直接使用,对我很有用,果断支持!
快撑死的鱼
- 粉丝: 1w+
- 资源: 9149
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 适用于 Python 3 的 Django LDAP 用户身份验证后端 .zip
- 基于PBL-CDIO的材料成型及控制工程课程设计实践与改革
- JQuerymobilea4中文手册CHM版最新版本
- 适用于 Python 2 和 3 以及 PyPy (ws4py 0.5.1) 的 WebSocket 客户端和服务器库.zip
- 适用于 AWS 的 Python 无服务器微框架.zip
- 适用于 Apache Cassandra 的 DataStax Python 驱动程序.zip
- WebAPI-案例-年会抽奖.html
- 这里有一些基础问题和一些棘手问题的解答 还有hackerrank,hackerearth,codechef问题的解答 .zip
- Jqueryeasyui网络教程中文最新版本
- 英汉双解字典(数据结构课程设计)代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功