アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトル通りHEWでCソースに一部アセンブラを使いたいのですが、Webにサンプルとなる物がほとんどなく、マニュアルを読んで試してみたところやはり上手くいきません。用途はLCDを使う時の短い遅延です。__asm {}で囲うだけではだめで、#pragma asmを入れてみてもだめでした。陥りやすい盲点だけでも結構ですのでよろしくお願いします。

A 回答 (2件)

ルネサステクノロジのサイトから、コンパイラパッケージのドキュメントを見ると、Cソースにアセンブラコードを記述する拡張機能を利用する場合、これらが有効となる条件が各拡張機能毎に異なる仕様になっていることが記載されているのが読み取れます。



1) __asmが利用できる条件は
「10.C/C++言語仕様」→「10.2 拡張機能」→「10.2.1 #pragma 拡張子、キーワード」→「(3)その他の拡張機能」→「アセンブラ埋め込み機能」→「__asm」→「備考」に記載されているとおり、H8SX及びH8SのCPUを指定した場合

2) #pragma asm,#pragma endasmが利用できる条件は
「10.C/C++言語仕様」→「10.2 拡張機能」→「10.2.1 #pragma 拡張子、キーワード」→「(3)その他の拡張機能」→「アセンブラ埋め込み機能」→「#pragma asm」→「備考」に記載されているとおり、code=asmcodeオプションを指定した場合

3) #pragma inline_asmが利用できる条件は
「10.C/C++言語仕様」→「10.2 拡張機能」→「10.2.1 #pragma 拡張子、キーワード」→「(2)関数に関する拡張機能」→「アセンブラ記述関数のインライン展開」→「#pragma inline_asm」→「備考」に記載されているとおり、code=asmcodeオプションを指定した場合

それぞれの詳細はマニュアルの項目を参照してください。

なお、Cソース上でNOP命令を埋め込むだけなら、「10.C/C++言語仕様」→「10.2 拡張機能」→「10.2.3 組み込み関数」→「NOP命令」の項目に記載されているように、ヘッダ<machine.h>をincludeして、nop()関数を利用することで、すっきり簡単に実現できることが読み取れます。

参考URL:http://documentation.renesas.com/jpn/products/to …
    • good
    • 0
この回答へのお礼

調べていただき感謝しています。
おかげで__asm{}が私の使っているH8/300Hでは使えないことを発見できました。
ありがとうございました。

お礼日時:2006/07/13 18:14

マニュアルに記載のある通りです。


#pragma asmを有効にするには
-code=asmcode のオプションが必要です。

設定方法は、
HEWから、
メニュー 「ビルド」->「H8S H8/300 standerd tool chain」->「コンパイラ」タブ
カテゴリを プルダウンで「オブジェクト」指定
出力ファイル形式 「アセンブリプログラム(*.src)」
に変えてみるとコンパイルオプションに、-code=asmcodeが
設定されます。
    • good
    • 0
この回答へのお礼

自分で気づいてNo.2さんがおっしゃる事を設定しました。pragma asm内ではエラーがでても必ず1行目を示すようでそれで少し悩まされましたが無事解決できました。 ありがとうございました。

お礼日時:2006/07/13 20:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!