藤田様の別スレッドに便乗なのですが、CS+のRL78のコード生成ツールが生成するuart通信機能のポインタ変数でvolatile修飾子の記述位置がおかしいものがあるように思います。具体的な変数名で言うと、gp_uart0_tx_addressとgp_uart0_rx_addressです。(CS+ for CC V5.00.00のコード生成機能で確認しました。)コード生成ツールが生成した変数宣言は以下の通りです。volatile uint8_t * gp_uart0_tx_address; /* uart0 send buffer address */volatile uint8_t * gp_uart0_rx_address; /* uart0 receive buffer address */ところが、以下の画面コピーの赤枠の箇所の通り、割り込みルーチン内で変更されるのはgp_uart0_tx_addressやgp_uart0_rx_addressの変数自身ですので以下の変数宣言が正しい気がします。uint8_t * volatile gp_uart0_tx_address; /* uart0 send buffer address */uint8_t * volatile gp_uart0_rx_address; /* uart0 receive buffer address */試しに型修飾子の作用の仕方がvolatileと同様なconst(型修飾子の作用自体(機能)としては対義語的になる)で試してみると、変数自身に作用したのは以下の画面コピーのように橙枠の方でしたので、volatileも変数自身に作用させる場合には同様である筈です。
> 薄青の画面はどうやって作るのですか?
投稿の際に'Use rich formatting' を選び、「Tools」→「<> Source code」を選択して HTML 編集を行い、コードは <pre> ~ </pre> で囲んでいます。
リカルドさん、こんにちは。
リカルドさまwrote: said:インターネットで次の記事を見つけました。 sunafukin2go.hatenablog.com/.../014148 こういった場合にvolatile unsigned char *piAddr;をして、この最適化を抑制します。 なお補足しておきますが、unsigned char * volatile piAddr; とするとアドレスが最適化されないという意味になります。 基本的にはアドレスの指す先が最適化されないというのが一般的ではないかと思います。 [引用終]