This is a program by Renesas RX microcontroller and its compiler rx-elf-gcc, g++.
I am currently using Renesas GNU-RX gcc 8.3.0 as my main development tool.
GNU-RX supports RXv3 and DFPU, and has excellent optimization.
Currently, a dedicated writing program has been implemented that has been tested on Windows, OS-X, and Linux.
Development is now possible in multiple environments.
Currently supported and tested devices:
Series | MinV | MaxV | MHz | Core | FPU | TFU | DFPU | Operation check | rx_prog | Linker file |
---|---|---|---|---|---|---|---|---|---|---|
RX110 | 1.8 | 3.6 | 32 | RXv1 | - | - | - | R5F51103/4/5 | ||
RX111 | 1.8 | 3.6 | 32 | RXv1 | - | - | - | R5F51115/6/7 | ||
RX113 | 1.8 | 3.6 | 32 | RXv1 | - | - | - | R5F51136/8 | ||
RX130 | 1.8 | 5.5 | 32 | RXv1 | - | - | - | R5F51305/6 | ||
RX140 | 1.8 | 5.5 | 48 | RXv2 | Yes | - | - | 〇 | 〇 | R5F51403/5/6 |
RX13T | 2.7 | 5.5 | 32 | RXv1 | Yes | - | - | R5F513T3/5 | ||
RX220 | 1.62 | 5.5 | 32 | RXv1 | - | - | - | 〇 | 〇 | R5F52206 |
RX231 | 1.8 | 5.5 | 54 | RXv2 | Yes | - | - | 〇 | 〇 | R5F52316/7/8 |
RX23T | 2.7 | 5.5 | 40 | RXv2 | Yes | - | - | R5F523T5 | ||
RX24T | 2.7 | 5.5 | 80 | RXv2 | Yes | - | - | 〇 | 〇 | R5F524T8/A |
RX24U | 2.7 | 5.5 | 80 | RXv2 | Yes | - | - | R5F524UB/E | ||
RX261 | 1.6 | 5.5 | 64 | RXv3 | Yes | ー | ー | R5F52618 | ||
RX26T | 2.7 | 5.5 | 120 | RXv3 | Yes | V2 | ー | 〇 | 〇 | R5F526TF |
RX621 | 2.7 | 3.6 | 100 | RXv1 | Yes | - | - | 〇 | 〇 | R5F56218 |
RX62N | 2.7 | 3.6 | 100 | RXv1 | Yes | - | - | 〇 | 〇 | R5F562N7/8 |
RX631 | 2.7 | 3.6 | 100 | RXv1 | Yes | - | - | 〇 | 〇 | R5F5631F |
RX63N | 2.7 | 3.6 | 100 | RXv1 | Yes | - | - | 〇 | 〇 | R5F563NE |
RX63T | 3.3 | 5 | 100 | RXv1 | Yes | - | - | 〇 | 〇 | R5F563T6 |
RX64M | 2.7 | 3.6 | 120 | RXv2 | Yes | - | - | 〇 | 〇 | R5F564MF/G/J/L |
RX71M | 2.7 | 3.6 | 240 | RXv2 | Yes | - | - | 〇 | 〇 | R5F571MF/G/J/L |
RX651 | 2.7 | 3.6 | 120 | RXv2 | Yes | - | - | 〇 | 〇 | R5F5651E |
RX65N | 2.7 | 3.6 | 120 | RXv2 | Yes | - | - | 〇 | 〇 | R5F565NE |
RX66N | 2.7 | 3.6 | 120 | RXv3 | Yes | V1 | - | R5F566ND/N | ||
RX660 | 2.7 | 5.5 | 120 | RXv3 | Yes | - | - | R5F56609 | ||
RX671 | 2.7 | 5.5 | 120 | RXv3 | Yes | - | - | R5F5671C/E | ||
RX72N | 2.7 | 3.6 | 240 | RXv3 | Yes | V1 | Yes | 〇 | △ | R5F572ND/N |
RX72M | 2.7 | 3.6 | 240 | RXv3 | Yes | V1 | Yes | △ | △ | R5F572MD/N |
RX66T | 2.7 | 5.5 | 160 | RXv3 | Yes | - | - | 〇 | 〇 | R5F566TA/E/F/K |
RX72T | 2.7 | 5.5 | 200 | RXv3 | Yes | V1 | - | 〇 | 〇 | R5F572TF/K |
- The directory structure is updated daily.
- Some features are still under construction.
- The project consists of a Makefile and related headers and source code, and includes dedicated startup routines and linker scripts.
Please make a request if you want us to support other RX devices. (Conditions below)
- Become a support member of hirakuni45 GitHub.
- Lend us a board with the RX microcontroller you are requesting support for.
- You agree to release newly added files related to the RX microcontroller under the MIT license.
**If you do not know how to use the framework
- Create a GitHub account and post in Discussions.
- You can also become a support member to get extensive support.
If you have a problem with the framework or need a fix, please create a Github account and post a note in Discussions.
- Create a Github account and post in Issues.
- If you have a modification request, post it in Discussions.
- If you have a pull request, please write the contents in Issues and Discussions in advance.
Space Invaders Emulator, NES Emulator, for RX65N/RX72N Envision kit
WAV/MP3 Audio Player, File selector, for RX65N/RX72N Envision kit
functional calculator, DX7 Emulator
YouTube: NES Emulator for RX65N Envision kit
Device control classes with template design patterns provide flexible and concise functionality.
Due to its functionality, it does not require difficult or complicated settings or code generation by separate programs.
// LED flashing program
#include "common/renesas.hpp"
namespace {
// typedef device::PORT<device::PORT0, device::bitpos::B7> LED; // LED connection port, Active HIGH
typedef device::PORT<device::PORT0, device::bitpos::B7, false> LED; // LED connection port, Active LOW
}
int main(int argc, char** argv);
int main(int argc, char** argv)
{
SYSTEM_IO::boost_master_clock();
LED::OUTPUT();
while(1) {
utils::delay::milli_second(250);
LED::P = 1;
utils::delay::milli_second(250);
LED::P = 0;
}
}
In order to complete the process from dependency rule generation to compilation and linking, usually with a single "make" command,
I do not need it.
No need for a dedicated boot program or loader I can write and execute.
For development, we recommend using "Visual Studio Code" that can be used on multiple platforms.
- For device I/O operations, dedicated headers are provided utilizing template class libraries implemented in C++.
- We also provide a full set of utilities and class libraries.
directory | contents |
---|---|
all_project_build.sh | build all projects (shell script) |
/RX110 | RX110 specific device definition class, linker script |
/RX111 | RX111 specific device definition class, linker script |
/RX130 | RX130 specific device definition class, linker script |
/RX13T | RX13T specific device definition class, linker script |
/RX140 | RX140 specific device definition class, linker script |
/RX220 | RX220 specific device definition class, linker script |
/RX231 | RX231 specific device definition class, linker script |
/RX23T | RX23T specific device definition class, linker script |
/RX24T | RX24T specific device definition class, linker script |
/RX24U | RX24U specific device definition class, linker script |
/RX26x | RX260/RX261 specific device definition class, linker script |
/RX26T | RX26T specific device definition class, linker script |
/RX62x | RX621/RX62N dedicated device definition class, linker script |
/RX63x | RX631/RX63N specific device definition class, linker script |
/RX63T | RX63T specific device definition class, linker script |
/RX64M | RX64M dedicated device definition class, linker script |
/RX65x | RX651/RX65N specific device definition class, linker script |
/RX660 | RX660 specific device definition class, linker script |
/RX66N | RX66N specific device definition class, linker script |
/RX66T | RX66T dedicated device definition class, linker script |
/RX671 | RX671 specific device definition class, linker script |
/RX71M | RX71M dedicated device definition class, linker script |
/RX72N | RX72N dedicated device definition class, linker script |
/RX72M | RX72M dedicated device definition class, linker script |
/RX72T | RX72T dedicated device definition class, linker script |
/RX600 | RX microcontroller common device definition class |
/common | shared classes, headers, etc. |
/rxlib | zlib, png, mad, gmp, mpfr libraries |
/FreeRTOS | FreeRTOS for various RX microcontrollers and simple samples |
/ff14 | ChaN's fatfs source code and handler for RX microcontrollers |
/chip | various device specific control driver libraries such as I2C, SPI, etc |
/graphics | Graphics drawing related classes |
/gui | Graphics user interface related classes (GUI Widget) |
/sound | sound and audio related classes |
/usb | USB handler, manage class |
/tinyusb | TinyUSB source code |
/rxprog | RX microcontroller, Flash program writing tool (for Windows, OS-X, Linux) |
LICENSE | license description file |
Directory | RX220 | RX631 | RX63T | RX62N | RX24T | RX66T | RX72T | RX64M | RX71M | RX65N | RX72N | Contents |
---|---|---|---|---|---|---|---|---|---|---|---|---|
/FIRST_sample | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | LED blinking Sample Program |
/SCI_sample | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | serial communication Sample Program |
/MTU_sample | - | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | Multi-Function Timer Pulse Unit Sample Program |
/CAN_sample | - | 〇 | - | 〇 | - | 〇 | 〇 | 〇 | 〇 | △ | 〇 | CAN Communication Sample Program |
/FLASH_sample | - | - | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | Internal data flash operation sample |
/FreeRTOS | 〇 | 〇 | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | FreeRTOS Basic operation sample |
/GPTW_sample | - | - | - | - | △ | 〇 | 〇 | - | - | △ | 〇 | GPTW PWM Sample Program |
/I2C_sample | 〇 | 〇 | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | I2C Device Access Sample |
/RAYTRACER_sample | - | 〇 | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | Ray Tracing Benchmark |
/SDCARD_sample | - | - | - | - | 〇 | 〇 | 〇 | 〇 | △ | 〇 | 〇 | SD Card Operation Sample |
/SIDE_sample | - | - | - | - | - | - | - | - | - | 〇 | 〇 | Envision Kit, Space Invaders emulator |
/NESEMU_sample | - | - | - | - | - | - | - | - | - | 〇 | 〇 | Envision Kit, NES emulator |
/GUI_sample | - | - | - | - | - | - | - | - | - | 〇 | 〇 | GUI Sample、Graphics User Interface (Soft rendering, using DRW2D engine) |
/AUDIO_sample | - | - | - | - | - | - | - | 〇 | △ | 〇 | 〇 | MP3/WAV Audio Player (FreeRTOS) |
/SYNTH_sample | - | - | - | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | FM sound synthesizer emulator |
/CALC_sample | - | 〇 | - | 〇 | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | Function calculator samples (gmp, mpfr libraries) |
/DSOS_sample | - | - | - | - | - | - | - | - | - | △ | 〇 | Digital Storage Oscilloscope Samples |
/PSG_sample | - | 〇 | - | 〇 | - | 〇 | 〇 | 〇 | 〇 | 〇 | 〇 | Pseudo PSG Sound Source Performance Samples |
/TUSB_HOST_sample | - | - | - | - | - | - | - | - | - | 〇 | 〇 | TinyUSB/Host Samples |
*Please consider directories and files that are not in the above list but exist when checked out as work in progress.
- Open source libraries built for RX microcontrollers
rxlib See also
- Various utilities
- Convenience Classes
- Common files for each microcontrollers
common See also
- Template driver classes for various IC manufacturers (I2C, SPI, and various other interfaces)
- In C++, the use of templates can be used to generalize operations using interfaces such as I2C and SPI.
- The headers in the chip directory are dedicated to the initialization and control of each IC and are not concerned with the interface definition.
- The context of the interface (control pins) is given by reference.
- Since there is no definition of interfaces, the creation is very versatile and highly flexible.
chip See also
- Classes related to screen rendering
graphics See also
- GUI Widget Classes
gui See also
- Classes related to sound
sound See also
- Mr. ChaN's FatFs source code set
- MMC Driver Class (SPI)
- If SDHI interface is available, real mode driver can also be selected.
ff14 See also
- For KiCAD, parts files, etc.
KiCAD_lib See also
- Files not currently supported, etc.
legacy See also
The former KPIT support for the GNU toolchain has been replaced by Open Source Tools for Renesas has added a new GNU tools.
As the latest (as of July 2020) GNU toolchain for RX microcontrollers,
- binutils-2.24
- gcc-8.3.0
- newlib-3.1.0
- gdb-7.8.2
You can download a toolchain for RX microcontrollers based on the above files.
The tool can be downloaded by anyone who registers, and there is no binary limit.
It also seems to have optimizations in RX microcomputers and support for the latest cores.
Since gcc is based on 8.3.0, it supports C++17.
It has deeper optimizations than normal gcc and supports the latest CPU cores.
All projects using the C++ framework published here are compileable.
They are also providing support.(CyberTHOR Studios Limited)
To use this tool from MSYS2, set the command path to ".bash_profile" after installing the toolchain.
When compiling open source libraries, etc., there is a problem with path strings containing "spaces" or 2-byte codes.
To avoid this problem, it is recommended to copy the directory to "/usr/local" and use that path.
# rx-elf path
# PATH=$PATH:/usr/local/rx-elf/bin
PATH=$PATH:/C/'Program Files (x86)'/'GCC for Renesas RX 8.3.0.202002-GNURX-ELF'/rx-elf/rx-elf/bin
Features in Renesas GNU-RX 8.3.0:
- RXv3 Core Support
- Generation of double-precision floating-point instructions
- RX72N Built-in trigonometric function unit (TFU) support
The difference between CC-RX:
In terms of compiler optimization, CC-RX seems to be superior to GNU-RX in the CoreMark benchmark.
It's hard to imagine why such a big difference would occur, but if you know the internal structure of the CPU, you might be able to achieve it...
Compiler | RX core | CoreMark (MHz) | Rate |
---|---|---|---|
CC-RX (V3.02) | RX72N | 5.21 | 1.00 |
GNU-RX (8.3.x) | RX72N | 3.59 | 0.69 |
CC-RX (V3.02) | RX65N | 4.37 | 1.00 |
GNU-RX (8.3.x) | RX65N | 3.22 | 0.74 |
The above values are quite exciting, but when running actual applications, we do not feel such a big difference in sensory perception.
- The big difference seems to occur in the case of applications that use a lot of instructions that require a relatively large number of CPU cycles, such as multiplication and division.
- For applications that use a lot of floating point instructions, GNU-RX may be faster.
No matter how good CC-RX is, it's not worth the cost for hobbyists, and if it doesn't support C++11, it's not practical to use.
In addition, the above benchmarks are based on CoreMark, so you need to evaluate it with actual applications to know what it really is.
- On Windows, install the MSYS2 environment in advance.
- MSYS2 has msys2, mingw32, mingw64 and 3 different environments, but gcc for RX microcontroller Because it is necessary to build of, do with msys2.
- MSYS2 is a UNIX-based application development environment.
- MINGW32 is an environment for i686 that the exception model of gcc is not war related to SEH because of Borland patent.
- MINGW64 is an environment for developing Windows-based applications.
- If you have installed any software other than Microsoft's anti-virus software, please disable it.
- The GCC build may take an unusually long time or may fail to build.
- MSYS2 upgrade
pacman -Sy pacman
pacman -Syu
- Open the console again. (You should see a message as you reopen the console)
pacman -Su
-
The update is done multiple times, then follow the instructions on the console.
-
You need to reopen the console several times.
-
Install gcc, texinfo, gmp, mpfr, mpc, diffutils, automake, zlib, tar, make, unzip, git commands etc
pacman -S gcc
pacman -S texinfo
pacman -S mpc-devel
pacman -S diffutils
pacman -S automake
pacman -S zlib
pacman -S tar
pacman -S make
pacman -S unzip
pacman -S zlib-devel
pacman -S git
- In OS-X, install macports in advance.
brew is not recommended because it has less flexibility - Depending on the version of OS-X, you may need to install X-Code, Command Line Tools, etc. in advance
- macports upgrade
sudo port -d self update
- As you probably know, in the early stage of OS-X, llvm starts by calling gcc.
- However, llvm can not currently build gcc cross compilers.
- So, I will install gcc on macports, I will use the 5 series version.
sudo port install gcc5
sudo ln -sf /opt/local/bin/gcc-mp-5 /usr/local/bin/gcc
sudo ln -sf /opt/local/bin/g++-mp-5 /usr/local/bin/g++
sudo ln -sf /opt/local/bin/g++-mp-5 /usr/local/bin/c++
- You may need to reboot.
- For now, please check.
gcc --version
gcc (MacPorts gcc5 5.4.0_0) 5.4.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- Install texinfo, gmp, mpfr, mpc, diffutils, automake command etc
sudo port install texinfo
sudo port install gmp
sudo port install mpfr
sudo port install libmpc
sudo port install diffutils
sudo port install automake
-
There are multiple Linux environments, so here we will write the case for the "Ubuntu 16.04 LTS" environment.
-
Install texinfo, gmp, mpfr, mpc, diffutils, automake command etc
sudo apt-get install texinfo
sudo apt-get install libgmp-dev
sudo apt-get install libmpfr-dev
sudo apt-get install libmpc-dev
sudo apt-get install diffutils
sudo apt-get install automake
sudo apt-get install zlib1g-dev
- The RX compiler (rx-elf-gcc, g++) uses "gcc-7.5.0".
- Download "binutils-2.34.tar.gz".
- Download "gcc-7.5.0.tar.gz".
- Download "newlib-2.4.0.tar.gz".
- There are multiple versions of binutils, gcc and newlib, but some combinations
It has been found that ineligible binaries (which have subtle problems with operation) will be built. - This bug occurs when using Renesas network stack (net_T4).
- It is not possible to identify the cause why such malfunction occurs.
- Here is a list of combinations that we have investigated.
binutils-2.27, gcc-4.9.4, newlib-2.2.0 ---> OK
binutils-2.27, gcc-5.5.0, newlib-2.2.0 ---> OK
binutils-2.27, gcc-5.5.0, newlib-2.4.0 ---> OK
binutils-2.27, gcc-6.4.0, newlib-2.4.0 ---> OK
binutils-2.28, gcc-6.4.0, newlib-2.4.0 ---> OK
binutils-2.30, gcc-6.4.0, newlib-2.4.0 ---> OK (old current)
binutils-2.30, gcc-6.4.0, newlib-3.0.0 ---> NG
binutils-2.34, gcc-7.5.0, newlib-2.4.0 ---> OK (new current)
- Using the latest gcc seems to be faster code, especially for C++.
cd
tar xfvz binutils-2.34.tar.gz
cd binutils-2.34
mkdir rx_build
cd rx_build
../configure --target=rx-elf --prefix=/usr/local/rx-elf --disable-nls
make
make install OS-X,Linux: (sudo make install)
- Pass PATH to /usr/local/rx-elf/bin (edit .bash_profile and add path)
PATH=$PATH:/usr/local/rx-elf/bin
- Open the console again.
rx-elf-as --version
- Execute the assembler command and check if the path is valid.
cd
tar xfvz gcc-7.5.0.tar.gz
cd gcc-7.5.0
mkdir rx_build
cd rx_build
../configure --prefix=/usr/local/rx-elf --target=rx-elf --enable-languages=c --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --disable-multilib --enable-lto
make
make install OS-X,Linux: (sudo make install)
cd
tar xfvz newlib-2.4.0.tar.gz
cd newlib-2.4.0
mkdir rx_build
cd rx_build
../configure --target=rx-elf --prefix=/usr/local/rx-elf
make
make install OS-X: (sudo make install)
- In Linux environment, sudo command does not recognize the path of binutils set up locally. "Make install" will fail, so write the following script and execute it.
#!/bin/sh
# file: rx_install.sh
PATH=${PATH}:/usr/local/rx-elf/bin
make install
sudo rx_install.sh
cd
cd gcc-7.5.0
cd rx_build
../configure --prefix=/usr/local/rx-elf --target=rx-elf --enable-languages=c,c++ --disable-libssp --with-newlib --disable-nls --disable-threads --disable-libgomp --disable-libmudflap --disable-libstdcxx-pch --disable-multilib --enable-lto --with-system-zlib
make
make install OS-X,Linux: (sudo make install)
- The built compiler collection is listed in the link below. (MSYS2 only)
http://www.rvf-rc45.net/Renesas_GNU_Tools/
git clone https://github.com/hirakuni45/RX.git
- In the past, boost was installed for mingw64 using pacman in the MSYS2 environment.
- However, as the version of boost advanced, we found that this boost caused problems.
- Therefore, we put the boost archive in the proper location and handle it.
- This method is used in the MSYS2 environment.
- Since boost uses 1.74.0, please download it in advance (place it in D:³ Download). (boost_1_74_0.tar.gz)
cd /c/
tar xfvz /d/Download/boost_1_74_0.tar.gz
sh all_project_build.sh [clean]
There are several ways, but the easiest and least expensive way is to use the serial interface It is a method of writing.
- However, the writing speed is not very fast.
In case of RX microcontroller with built-in USB interface, you can boot and connect with USB, but the driver Seems to only support the Windows version.
- The circumstances around here may be wrong as we have not investigated in detail.
The most common, because not all RX microcontrollers have built-in USB interface We will show you how to write using serial interface.
-
Writing at the serial interface is reasonably fast but easy and secure, and easy to connect.
-
The hardware manual describes the connection with the serial port and switching to boot mode. Please refer to it.
-
Normally, setting MD terminal to L or H allows switching between program and internal ROM execution.
-
It is also necessary to control the state of the UB terminal.
-
If you use a USB serial conversion module etc., it is easy to get power.
- RXD serial reception
- TXD serial transmission
- VCC power (5V or 3.3V)
- GND power 0V
- As 3.3V can only extract a limited current, a regulator is always required.
- Details on the connection method, boot mode settings, etc. can be found in the hardware manual for each device.
-
Currently, flash writing to RX63T, RX24T, RX64M, and RX71M is confirmed.
-
Since the reset is not controlled, it is necessary to assert the reset signal at the time of writing.
-
In the current version, only erase, write and compare operations are implemented.
-
Code protection ID settings and operations are not implemented yet.
-
In the RX24T and RX63T, the erase operation is ignored because the erase is performed automatically when the connection is established.
-
Build rxprog in MSYS2 environment.
-
Copy the built executable file to "/usr/local/bin".
-
Pass the PATH to /usr/local/bin.
cd rxprog
make
make install
Renesas RX Series Programmer Version 0.90b
Copyright (C) 2016,2018 Hiramatsu Kunihito (hira@rvf-rc45.net)
usage:
rx_prog [options] [mot file] ...
Options :
-P PORT, --port=PORT Specify serial port
-s SPEED, --speed=SPEED Specify serial speed
-d DEVICE, --device=DEVICE Specify device name
-e, --erase Perform a device erase to a minimum
-v, --verify Perform data verify
-w, --write Perform data write
--progress display Progress output
--device-list Display device list
--verbose Verbose output
-h, --help Display this
- Edit rx_prog.conf and set the COM port to connect and the baud rate.
- Ports and baud rates can be set for each of Windows, OS-X and Linux environments.
- You can write a standard serial port in "rx_prog.conf", and you should set it according to your environment.
- Each project's "Makefile" contains a script that can be written using "make run".
rx_prog.conf:
port_win = COM12
port_osx = /dev/tty.usbserial-DA00X2QP
port_linux = /dev/ttyUSB0
speed_win = 230400
speed_osx = 230400
speed_linux = 230400
- The following is an example program to communicate with SCI in C++.
- The port of SCI is defined by "port_map.hpp", and there is more than one port to select There is no need to make complicated settings if you set "second candidate" or "third candidate".
- The baud rate can be set as an integer, and is automatically calculated internally from the set frequency.
- Even if you use interrupts, you can use them without polling (polling).
- Transmission and reception are performed through a fixed length FIFO class, and the size can be freely defined.
- The sci_putch and sci_getch functions are called from POSIX file functions, so they can be linked externally.
- The above functions are accessed from stdout, stdin, stderr descriptors, so you can also use the printf function, but for various reasons we do not recommend using "utils :: format", which is the size It is smaller, more flexible, convenient and safe.
#include "common/renesas.hpp"
#include "common/fixed_fifo.hpp"
#include "common/sci_io.hpp"
#include "common/format.hpp"
namespace {
// Use SCI9
typedef device::SCI9 SCI_CH;
typedef utils::fixed_fifo<char, 512> RXB; // RX (RECV) buffer definition at 512 bytes
typedef utils::fixed_fifo<char, 256> TXB; // TX (SEND) buffer definition at 256 buyes
typedef device::sci_io<SCI_CH, RXB, TXB> SCI;
// When selecting a second candidate for the SCI port
// typedef device::sci_io<SCI_CH, RXB, TXB, device::port_map::option::SECOND> SCI;
SCI sci_;
}
extern "C" {
// standard output, called from "syscalls.c"(stdout, stderr)
void sci_putch(char ch) { sci_.putch(ch); }
void sci_puts(const char* str) { sci_.puts(str); }
// standard input, called from "syscalls.c"(stdin)
char sci_getch(void) { return sci_.getch(); }
uint16_t sci_length() { return sci_.recv_length(); }
}
int main(int argc, char** argv);
int main(int argc, char** argv)
{
SYSTEM_IO::boost_master_clock();
{ // Start SCI
uint8_t intr = 2; // Interrupt level
uint32_t baud = 115200; // baudrate
sci_.start(baud, intr);
}
//-----
{ // main、SCI output
utils::format("Start SCI\n");
}
// to loop
while(1) ;
}
Translated with www.DeepL.com/Translator (free version)
Copyright (c) 2017 2019, Hiramatsu Kunihito
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the <organization> nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.