藤田様の別スレッドに便乗なのですが、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も変数自身に作用させる場合には同様である筈です。
正直なところvolatileとconstの作用の仕方が同じだと理解するようになったのは、いつ、どこで、どの情報源から、(あるいは試行錯誤していた時にたまたま?、) だったのか思い出せなかったので、今回、(1)ANSI/ISO Cでは?、(2)CC-RLでは?、についてウェブ(Wikipedia+α)とCC-RLのヘルプで確認してみました。結果、作用の仕方が異なることを示唆する情報は見付からず、同じであることを示唆する「It(volatileを指す) can be used in exactly the same manner as const in declarations of variables, pointers, references, and member functions」という文言はWikipediaの「Type qualifier」の項に見付かり、またCC-RLでも同じであることを示唆する記述は見付かりました。(1)ANSI/ISO Cでの確認用に調べたウェブページType qualifier - WikipediaConst - WikipediaVolatile - Wikipediaconst and volatile Pointers - Microsoft >...> C/C++ > Language and Standard Libraries > C++ Language Reference > Pointers const and volatile - ORACLE >...> Oracle Solaris Studio 12.3: C User's Guide > Transitioning to ISO C > 6.6(2)CC-RLでの確認用に調べたヘルプ項目__nearも__farもconstもvolatileもどれも作用対象(私の表現では作用の仕方)が同じと書かれている