🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

2249閲覧

CS+で生成されたCファイルの扱いがわかりません

makimax

総合スコア4

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/09/22 13:11

いつもお世話になっております.
今回CS+で生成されたCファイルの扱いでつまずいてしまったので質問させてください.

現在私はルネサスエレクトロニクスさんの統合開発環境CS+によってマイコンへの書き込みおよび
A/D変換の結果をシリアル通信で行おうとしています.

そこでチュートリアルを進めていく中で疑問が発生しました.
CS+でコード生成,ビルドデバックを行うと様々なcファイルやhファイルが生成されました.

マニュアルに書いてあったA/D変換のコードはr_cg_cmt_user.cに記載されていました.
このcファイルの中身を実行させたいのですが,CS+上にある実行のボタンを押すと
r_cg_main.cが作動します.

ここで皆さんにお聞きしたいのですが,
確かにCS+がmainファイルを動かしたい気持ちはわからなくも無いのですがこの場合

・r_cg_main.cの中にr_cg_cmt_user.cの動かしたい部分を搭載する
・r_cg_cmt_user.cだけを作動させる(させ方は調べたのですがよくわかりません)
・そもそもコンパイルやビルドの考え方の時点で私が間違っている

の様なことが考えられたのですが,プログラミング初心者なのでまず何が違うのかよくわかりません.
どなたかご教授いただけないでしょうか.
よろしくお願い致します.

以下にr_cg_main.cとr_cg_cmt_user.cのコードをincludeするところから載せておきます
(#を前に打つと表記が変になるのでincludeなどの前の#は消しています)
・r_cg_main.c
include "r_cg_macrodriver.h"
include "r_cg_cgc.h"
include "r_cg_icu.h"
include "r_cg_gpt.h"
include "r_cg_cmt.h"
include "r_cg_sci.h"
include "r_cg_s12ad.h"
/* Start user code for include. Do not edit comment generated here /
/
End user code. Do not edit comment generated here */
include "r_cg_userdefine.h"

/***********************************************************************************************************************
Global variables and functions
**********************************************************************************************************************/
/
Start user code for global. Do not edit comment generated here */
volatile unsigned long x;

unsigned char sw2=0;
unsigned long sw2_counter=0;
const unsigned long sw2_counter_skip=2000;

unsigned char sci_buf[SCI_BUF_SIZE];
unsigned short sci_buf_write_p=0;
unsigned short sci_buf_read_p=0;

unsigned char pos;
/* End user code. Do not edit comment generated here */

static void R_MAIN_UserInit(void);
/***********************************************************************************************************************

  • Function Name: main
  • Description : This function implements main function.
  • Arguments : None
  • Return Value : None

**********************************************************************************************************************/
void main(void)
{
R_MAIN_UserInit();
/
Start user code. Do not edit comment generated here */

sciInit(); sciPrint("BLUSHLESS MOTOR STARTER KIT TUTORIAL3¥n"); MPC.PWPR.BIT.B0WI = 0; MPC.PWPR.BIT.PFSWE = 1; //LED PORT0.PMR.BIT.B5 = 0; //ポートモードレジスタ MPC.P05PFS.BYTE = 0x00; //I/Oポート選択 PORT0.PODR.BIT.B5 = 0; //初期出力0 PORT0.PDR.BIT.B5 = 1; //出力モード //SW PORT0.PMR.BIT.B7 = 0; //ポートモードレジスタ MPC.P07PFS.BYTE = 0x00; //I/Oポート選択 PORT0.PDR.BIT.B7 = 0; //入力モード //HS //PORTD.PDR.BIT.B5 = 0; //入力モード //PORTD.PDR.BIT.B6 = 0; //入力モード //PORTD.PDR.BIT.B7 = 0; //入力モード while (1U) { sw2 = PORT0.PIDR.BIT.B7; if((sw2 == 0) && (sw2_counter == sw2_counter_skip)) { PORT0.PODR.BIT.B5 = ~PORT0.PODR.BIT.B5; } if((sw2 == 1) && (sw2_counter < sw2_counter_skip)) sw2_counter++; else if(sw2 == 0) sw2_counter=0; if(sci_buf_read_p != sci_buf_write_p) { sciWrite(sci_buf[sci_buf_read_p++]); if(sci_buf_read_p == SCI_BUF_SIZE) sci_buf_read_p=0; } nop(); nop(); nop(); nop(); nop(); nop(); nop(); nop(); } /* End user code. Do not edit comment generated here */

}
/***********************************************************************************************************************

  • Function Name: R_MAIN_UserInit
  • Description : This function adds user code before implementing main function.
  • Arguments : None
  • Return Value : None

**********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
/
Start user code. Do not edit comment generated here /
R_SCI1_Start();
clrpsw_i();
R_ICU_IRQ5_Start();
R_ICU_IRQ6_Start();
R_ICU_IRQ7_Start();
ICU.IR[69].BIT.IR = 0; //割り込みフラグクリア
ICU.IR[70].BIT.IR = 0;
ICU.IR[71].BIT.IR = 0;
for(x=0; x<10; x++) nop(); //wait
setpsw_i();
/
End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
unsigned char hs_read(void)
{
unsigned char pos;

pos = (PORTD.PIDR.BIT.B7 << 2) + (PORTD.PIDR.BIT.B6 << 1) + PORTD.PIDR.BIT.B5; return pos;

}
/* End user code. Do not edit comment generated here */

・r_cg_cmt_user.c
include "r_cg_macrodriver.h"
include "r_cg_cmt.h"
/* Start user code for include. Do not edit comment generated here /
include "blsm_temp_table.h"
/
End user code. Do not edit comment generated here */
include "r_cg_userdefine.h"

/***********************************************************************************************************************
Global variables and functions
**********************************************************************************************************************/
/
Start user code for global. Do not edit comment generated here /
/
End user code. Do not edit comment generated here */

/***********************************************************************************************************************

  • Function Name: r_cmt_cmi0_interrupt
  • Description : This function is CMI0 interrupt service routine.
  • Arguments : None
  • Return Value : None

**********************************************************************************************************************/
if FAST_INTERRUPT_VECTOR == VECT_CMT0_CMI0
pragma interrupt r_cmt_cmi0_interrupt(vect=VECT(CMT0,CMI0),fint)
else
pragma interrupt r_cmt_cmi0_interrupt(vect=VECT(CMT0,CMI0))
endif
static void r_cmt_cmi0_interrupt(void)
{
/
Start user code. Do not edit comment generated here */
unsigned short temparature_ad_val, vr_ad_val;
unsigned short temparature;
unsigned char i;
static unsigned long timer_counter=0;

timer_counter++; R_S12AD0_Start(); //A/D conv start while(S12AD.ADCSR.BIT.ADST == 1); //wait finished R_S12AD1_Start(); //A/D conv start while(S12AD1.ADCSR.BIT.ADST == 1); //wait finished R_S12AD0_Get_ValueResult(6, &temparature_ad_val); R_S12AD1_Get_ValueResult(8, &vr_ad_val); //tempatature calc for(i=0; i<80; i++) { if(temparature_ad_val < g_blsm_ad_val_table[i]) break; } temparature = g_blsm_temp_table[i]; GPT2.GTCCRA = (unsigned short)((float)(vr_ad_val)/4095.0*3000.0); if((timer_count

er % 500) == 0)
{
sciPrintBuf("\n");
sciPrintBuf("Tempatature(A/D value) : ");
sciPrintShortIntBuf(temparature_ad_val);
sciPrintBuf("\n");

sciPrintBuf("Tempatature(degree) : "); sciPrintShortIntBuf(temparature); sciPrintBuf("\n"); sciPrintBuf("VR(A/D value) : "); sciPrintShortIntBuf(vr_ad_val); sciPrintBuf("\n"); sciPrintBuf("P21 duty : "); sciPrintShortIntBuf(GPT2.GTCCRA); sciPrintBuf(" / 3000 \n"); } /* End user code. Do not edit comment generated here */

}

/* Start user code for adding. Do not edit comment generated here /
/
End user code. Do not edit comment generated here */

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2019/09/23 01:10

あなたのいう「チュートリアル」や「マニュアル」を回答者が見ているわけではありません。ネット上で見られるものであれば、それへのリンクなども情報として示すべきだと思います。
guest

回答3

0

聞くところを間違えています。
こっちで聞いてください。
かふぇルネ

名古屋のおいしい店について北海道で聞くようなものです。
答えられなくはなくても、地元民に聞いたほうがいいに決まっています。

投稿2019/09/22 13:51

編集2019/09/22 13:53
Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makimax

2019/09/22 14:49

回答ありがとうございます. これからしっかり内容で判断していきたいと思います. ありがとうございました.
guest

0

・r_cg_main.cの中にr_cg_cmt_user.cの動かしたい部分を搭載する

こっちのほうでどうぞ

投稿2019/09/22 13:51

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makimax

2019/09/22 14:54

回答ありがとうございます. イメージなんですけど,r_cg_main.cの方で関数の様にr_cg_cmt_user.cを呼び出す様な部分を 作る様な感じなのでしょうか?
y_waiwai

2019/09/22 22:51

C言語というのはmain関数から実行が始まる、ということになっとります。 それはこのような組み込み環境でも例外ではないので、とりあえずmain関数にそこらへんの処理を記述することにしましょう。
makimax

2019/09/22 23:26

わかりました. 勉強になります.その処理を考えてみようと思います. ありがとうございました.
guest

0

とりあえず、Cはファイル単位で実行するのではなく、main関数から実行を開始する、ぐらいの知識は持たないと...
それと、HEWのころはともかく最近はあそこのコンパイラ使ったこと無いんでけど、r_cmt_cmi0_interrupt()って割り込みで呼ばれる設定だったりしませんか?

それと、

(#を前に打つと表記が変になるのでincludeなどの前の#は消しています)

間違った対処法です。このサイトのマニュアル等も読みましょう。https://teratail.com/help/question-tips#questionTips3-5-1 とか。

投稿2019/09/22 14:29

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makimax

2019/09/22 14:46

至らぬところ多く指摘していただき感謝します. >r_cmt_cmi0_interrupt()って割り込みで呼ばれる設定だったりしませんか? あまり詳しいことはわからないのですが,このプログラムで10msに一回呼び出され,シリアル端末への表示は5sに一回行うものだと思ってので シリアル通信の表示がmainの方のsciPrint("BLUSHLESS MOTOR STARTER KIT TUTORIAL3¥n");以降 何も表示されなくてよくわからない状況です, >間違った対処法です。このサイトのマニュアル等も読みましょう。 お恥ずかしい限りです,勉強になります.ありがとうございます.
thkana

2019/09/23 01:14

質問に書かれている内容だけでは足りなそうな気もします。なんでそこでブラシレスモーターの話が出てくるのか...なにか前提を抜かしてプロジェクトを作っていたりするのでは。 質問の投稿内容は修正出来ます。適宜処置して下さい。
makimax

2019/09/23 01:20

どこで自分がわからなくなっているのかもう一度最初から確認してみたいと思います. ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問