割り込みサービスルーチンを含むRustのAMRボード用のベアメタルアプリケーションを作成しています。現在、私は#naked
関数を自分自身のアセンブラプロローグ/エピローグと併用しています。しかし、Rust nightlyや他のコンパイラのサポートでは、おそらく#interrupt
のような属性が欲しいと思っています。 GCCの__attribute__ ((interrupt ("IRQ")))
のラインに沿って、RustのバックエンドのLLVMはそのような属性を提供していると思います。割り込みのためのラスターコンパイラーのサポート
2
A
答えて
4
割り込みは、単に呼び出し規約の別のタイプです。 RustのAVRポートでは、AVRがサポートする割り込みの種類ごとに1つずつ、2種類の新しい呼び出し規約を追加しました。
呼び出し規約の正式リストis the source code。錆1.16リストこれら:
#[derive(PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, Clone, Copy, Debug)]
pub enum Abi {
// NB: This ordering MUST match the AbiDatas array below.
// (This is ensured by the test indices_are_correct().)
// Single platform ABIs
Cdecl,
Stdcall,
Fastcall,
Vectorcall,
Aapcs,
Win64,
SysV64,
PtxKernel,
Msp430Interrupt,
// Multiplatform/generic ABIs
Rust,
C,
System,
RustIntrinsic,
RustCall,
PlatformIntrinsic,
Unadjusted
}
unstable book also mentions that the different calling conventions exist。
これらを使用するには、あなたがそれをあなたの関数を宣言したい:
#![feature(abi_msp430_interrupt)]
extern "msp430-interrupt" fn handler() {}
それは、割り込みベクタテーブル(または同等)と例外ハンドラとして関数を登録するのはあなた次第まだです。
もちろん、あなたがまだこのリストにない場合は、特定のLLVM呼び出し規約のRustフロントエンドに使用するように通知するPRを提出する必要があります。
-2
は臆面もなく、ここで情報をコピー;)
https://github.com/nix-rust/nix
https://users.rust-lang.org/t/unix-signals-in-rust/733/3
use nix::sys::signal;
extern fn handle_sigint(_:i32) {
println!("Interrupted!");
panic!();
}
fn main() {
let sig_action = signal::SigAction::new(handle_sigint,
signal::SockFlag::empty(),
signal::SigSet::empty());
signal::sigaction(signal::SIGINT, &sig_action);
}
関連する問題
- 1. マイクロコントローラの時間のためのグローバルタイマー割り込み
- 2. MCU-ATMegaによるリアルタイムデータロギングのためのマルチ割り込み1280
- 3. 同期データ取得のためのハードウェア割り込み
- 4. TRAP、ソフトウェア割り込みとハードウェア割り込みの違いは?
- 5. Pythonで割り込みを実行するためのキーバインディングサブライムREPL
- 6. Camunda埋め込みフォームのラジオボタンのサポート
- 7. C++の割り込みサービスルーチン
- 8. クラス内の割り込み
- 9. 割り込みハンドラのコンテキストスイッチ
- 10. オペレーティングシステムの割り込みハンドラ
- 11. Linuxの割り込みレイテンシー
- 12. オペレーティングシステムの割り込み
- 13. Arduinoでの割り込み
- 14. 埋め込み:Uブート端末のCtrl-C割り込みのCコード
- 15. 他の割り込みベクタ内の割り込みベクタを呼び出す
- 16. cmake割り込みエラーなしでCUDAサポート付きOpenCVビルド
- 17. getTimeで動作する割り込み/割り込み関数の実行
- 18. 割り込みサービスルーチンのためのx86_64のレジスタを保存するには?
- 19. jquery割り込みJavascriptの読み込み中にjquery-1.7.1.min.js
- 20. vb.net OpeningTextFileWriterの後のコード割り込み
- 21. 割り込みベースのUART IOのマスター
- 22. ソフトウェアでのネットワーク割り込みのテスト
- 23. 割り込み保護されたバッファ
- 24. Androidタブレットデバイスの再構築と読み込みをサポートするためのデバイス
- 25. データ処理のための.rawファイルの読み込みと分割
- 26. x86割り込みテーブルの変更
- 27. カスタム割り込みデスクリプタテーブルの混乱
- 28. 割り込みサービスルーチン内のmutexes
- 29. CodeSourcery CS3割り込みハンドラのオーバーライド
- 30. iPhone IOSの割り込みコール/ SMS 5
私が理解しているように、これはa)a)b)unix環境でのシグナルですか?両方の条件は、質問に記載されている環境によって満たされていません。 – Matthias
2番目のリンクを読んでください。これは割り込みに関するものです。さびはまだそれをサポートしていません。ので、OPはnixライブラリを使用して回避する。 – sailfish009
SIGINTは、ISRが呼び出された後に生成された信号です。現時点では、私はプロローグやエピローグを気にする必要はありません。私はgccの属性 '__attribute__((interrupt(" IRQ "))))のようなハードウェア割り込みのISRのコンパイラサポートを探しています。 – Matthias