artiq/artiq/runtime.rs/src/lib.rs

72 lines
1.4 KiB
Rust
Raw Normal View History

2016-08-17 16:39:05 +08:00
#![no_std]
2016-10-05 13:59:38 +08:00
#![feature(libc, const_fn, try_borrow, stmt_expr_attributes, repr_simd)]
2016-08-17 16:39:05 +08:00
#[macro_use]
extern crate std_artiq as std;
extern crate libc;
2016-09-29 02:25:25 +08:00
#[macro_use]
extern crate log;
extern crate log_buffer;
extern crate byteorder;
extern crate fringe;
extern crate lwip;
2016-08-17 16:39:05 +08:00
2016-09-30 04:56:35 +08:00
use logger::BufferLogger;
2016-08-30 19:20:04 +08:00
2016-09-30 04:56:35 +08:00
mod board;
mod config;
mod clock;
mod rtio_crg;
2016-09-30 08:15:20 +08:00
mod mailbox;
2016-09-30 04:56:35 +08:00
mod urc;
mod sched;
2016-09-30 04:56:35 +08:00
mod logger;
2016-10-02 02:24:53 +08:00
mod cache;
2016-09-30 04:56:35 +08:00
2016-10-04 20:38:52 +08:00
mod proto;
mod kernel_proto;
2016-09-30 04:56:35 +08:00
mod session_proto;
2016-10-04 20:38:52 +08:00
mod moninj_proto;
2016-10-05 13:59:38 +08:00
mod analyzer_proto;
mod kernel;
2016-10-05 22:15:53 +08:00
mod rpc;
2016-09-30 04:56:35 +08:00
mod session;
2016-10-04 20:38:52 +08:00
mod moninj;
2016-10-05 13:59:38 +08:00
#[cfg(has_rtio_analyzer)]
mod analyzer;
extern {
fn network_init();
fn lwip_service();
}
2016-09-30 06:04:52 +08:00
include!(concat!(env!("OUT_DIR"), "/git_info.rs"));
2016-08-17 16:39:05 +08:00
#[no_mangle]
pub unsafe extern fn rust_main() {
static mut LOG_BUFFER: [u8; 4096] = [0; 4096];
BufferLogger::new(&mut LOG_BUFFER[..])
.register(move || {
2016-10-04 14:08:08 +08:00
info!("booting ARTIQ...");
info!("software version {}", GIT_COMMIT);
info!("gateware version {}", ::board::ident(&mut [0; 64]));
2016-09-30 06:04:52 +08:00
2016-09-30 04:36:04 +08:00
clock::init();
rtio_crg::init();
2016-09-29 02:25:25 +08:00
network_init();
2016-09-30 04:56:35 +08:00
let mut scheduler = sched::Scheduler::new();
2016-10-05 22:15:53 +08:00
scheduler.spawner().spawn(16384, session::thread);
2016-10-04 20:38:52 +08:00
scheduler.spawner().spawn(4096, moninj::thread);
2016-10-05 13:59:38 +08:00
#[cfg(has_rtio_analyzer)]
scheduler.spawner().spawn(4096, analyzer::thread);
2016-09-29 02:25:25 +08:00
loop {
scheduler.run();
2016-09-29 02:25:25 +08:00
lwip_service();
}
})
2016-08-17 16:39:05 +08:00
}