こんにちは。NoMaYです。今首を傾げているのですが、掲題のプロジェクトを生成させるとスマートコンフィグレータウィンドウのコンポーネント追加ダイアログで、FITモジュールしか表示されなくなって、コード生成コンポーネントを追加することが出来ず、コード生成コンポーネントが使えなくなってしまいます。これには何か理由がありそうなのでしょうか?(FreeRTOS APIをコード生成コンポーネントから呼び出せない筈は無いと思っているのですが、、、)ちなみに、プロジェクトの生成では、コンパイラはCC-RX V3.01、デバイスはR5F565NEDxFP、に設定して試しました。
こんにちは。NoMaYです。コード生成コンポーネントでSCIコンポーネントを生成させてみて、ようやく気付いたのですが、ビルドすると以下のエラーになってしまいますね。これが理由かも知れません、、、
src\smc_gen\Config_SCI0\Config_SCI0.h(55):E0520020:Identifier "MD_STATUS" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.h(56):E0520020:Identifier "MD_STATUS" is undefined
src\smc_gen\Config_SCI0\Config_SCI0.c(163):E0520020:Identifier "MD_STATUS" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(165):E0520020:Identifier "MD_STATUS" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(165):E0520020:Identifier "MD_OK" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(169):E0520020:Identifier "MD_ARGERROR" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(180):W0521056:Returning pointer to local variablesrc\smc_gen\Config_SCI0\Config_SCI0.c(194):E0520020:Identifier "MD_STATUS" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(196):E0520020:Identifier "MD_STATUS" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(196):E0520020:Identifier "MD_OK" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(200):E0520020:Identifier "MD_ARGERROR" is undefinedsrc\smc_gen\Config_SCI0\Config_SCI0.c(211):W0521056:Returning pointer to local variable
原因はFreeRTOSConfig.hの以下の部分ですね。FreeRTOSConfig.h
/* Prevent Renesas headers redefining some stdint.h types. */#define __TYPEDEF__ 1
上記によってr_cg_macrodriver.hの以下の部分が条件コンパイル文で除かれるためですね。スマートコンフィグレータへ代わる前は、Typedef definitionsの部分にstdint.hの内容と重複する型定義があって、CC-RXでエラー(もしくはワーニングだったかも)になっていたのだと思われます。スマートコンフィグレータでは、それらの型定義は無くなっていますので、もう上記の処置は不要ですので、削除してしまうことでビルド出来るようになります、、、r_cg_macrodriver.h (スマートコンフィグレータ版)
/******************************************************************************Macro definitions******************************************************************************/#ifndef __TYPEDEF__/* Status list definition */#define MD_STATUSBASE (0x00U)#define MD_OK (MD_STATUSBASE + 0x00U) /* register setting OK */#define MD_SPT (MD_STATUSBASE + 0x01U) /* IIC stop */#define MD_NACK (MD_STATUSBASE + 0x02U) /* IIC no ACK */#define MD_BUSY1 (MD_STATUSBASE + 0x03U) /* busy 1 */#define MD_BUSY2 (MD_STATUSBASE + 0x04U) /* busy 2 *//* Error list definition */#define MD_ERRORBASE (0x80U)#define MD_ERROR (MD_ERRORBASE + 0x00U) /* error */#define MD_ARGERROR (MD_ERRORBASE + 0x01U) /* error argument input error */#define MD_ERROR1 (MD_ERRORBASE + 0x02U) /* error 1 */#define MD_ERROR2 (MD_ERRORBASE + 0x03U) /* error 2 */#define MD_ERROR3 (MD_ERRORBASE + 0x04U) /* error 3 */#define MD_ERROR4 (MD_ERRORBASE + 0x05U) /* error 4 */#define MD_ERROR5 (MD_ERRORBASE + 0x06U) /* error 5 */#endif/******************************************************************************Typedef definitions******************************************************************************/#ifndef __TYPEDEF__ typedef unsigned short MD_STATUS; #define __TYPEDEF__#endif
r_cg_macrodriver.h (スマートコンフィグレータへ代わる前のコード生成機能版)
/******************************************************************************Macro definitions******************************************************************************/#ifndef __TYPEDEF__/* Status list definition */#define MD_STATUSBASE (0x00U)#define MD_OK (MD_STATUSBASE + 0x00U) /* register setting OK */#define MD_SPT (MD_STATUSBASE + 0x01U) /* IIC stop */#define MD_NACK (MD_STATUSBASE + 0x02U) /* IIC no ACK */#define MD_BUSY1 (MD_STATUSBASE + 0x03U) /* busy 1 */#define MD_BUSY2 (MD_STATUSBASE + 0x04U) /* busy 2 *//* Error list definition */#define MD_ERRORBASE (0x80U)#define MD_ERROR (MD_ERRORBASE + 0x00U) /* error */#define MD_ARGERROR (MD_ERRORBASE + 0x01U) /* error argument input error */#define MD_ERROR1 (MD_ERRORBASE + 0x02U) /* error 1 */#define MD_ERROR2 (MD_ERRORBASE + 0x03U) /* error 2 */#define MD_ERROR3 (MD_ERRORBASE + 0x04U) /* error 3 */#define MD_ERROR4 (MD_ERRORBASE + 0x05U) /* error 4 */#define MD_ERROR5 (MD_ERRORBASE + 0x06U) /* error 5 *//* BRK handler command options */typedef enum { BRK_NO_COMMAND, BRK_ALL_MODULE_CLOCK_STOP, BRK_SLEEP, BRK_DEEP_SLEEP, BRK_STANDBY, BRK_LOAD_FINTV_REGISTER} brk_commands;#endif/******************************************************************************Typedef definitions ******************************************************************************/#ifndef __TYPEDEF__typedef signed char int8_t;typedef unsigned char uint8_t;typedef signed short int16_t;typedef unsigned short uint16_t;typedef signed long int32_t;typedef unsigned long uint32_t;typedef unsigned short MD_STATUS;#define __TYPEDEF__#endif
ちなみに、推測ですが、スマートコンフィグレータへ代わる前(もしかするとRL78(あるいは更に昔の78K)のコード生成機能の初期にまで遡るかも知れません)はインクルードガードが無く、代わりに、この__TYPEDEF__で2重定義のエラー(もしくはワーニング)を防止していたのかも知れません、、、(なお、今のスマートコンフィグレータでは、以下のインクルードガードがありました、、、)r_cg_macrodriver.h (スマートコンフィグレータ版)
#ifndef MACRODRIVER_H#define MACRODRIVER_H/******************************************************************************Includes******************************************************************************/#include "platform.h"#include "r_smc_interrupt.h"#include <machine.h>/******************************************************************************Macro definitions (Register bit)******************************************************************************//******************************************************************************Macro definitions******************************************************************************/略#endif