use proc_macro2::TokenStream as TokenStream2; use quote::quote; use rtic_syntax::{ast::App, Context}; use crate::{ analyze::Analysis, check::Extra, codegen::{local_resources_struct, module, shared_resources_struct}, }; /// Generate support code for hardware tasks (`#[exception]`s and `#[interrupt]`s) pub fn codegen( app: &App, analysis: &Analysis, extra: &Extra, ) -> ( // mod_app_hardware_tasks -- interrupt handlers and `${task}Resources` constructors Vec, // root_hardware_tasks -- items that must be placed in the root of the crate: // - `${task}Locals` structs // - `${task}Resources` structs // - `${task}` modules Vec, // user_hardware_tasks -- the `#[task]` functions written by the user Vec, ) { let mut mod_app = vec![]; let mut root = vec![]; let mut user_tasks = vec![]; for (name, task) in &app.hardware_tasks { let symbol = task.args.binds.clone(); let priority = task.args.priority; let cfgs = &task.cfgs; let attrs = &task.attrs; let user_hardware_task_isr_doc = &format!(" User HW task ISR trampoline for {name}"); mod_app.push(quote!( #[allow(non_snake_case)] #[no_mangle] #[doc = #user_hardware_task_isr_doc] #(#attrs)* #(#cfgs)* unsafe fn #symbol() { const PRIORITY: u8 = #priority; rtic::export::run(PRIORITY, || { #name( #name::Context::new(&rtic::export::Priority::new(PRIORITY)) ) }); } )); let mut shared_needs_lt = false; let mut local_needs_lt = false; // `${task}Locals` if !task.args.local_resources.is_empty() { let (item, constructor) = local_resources_struct::codegen( Context::HardwareTask(name), &mut local_needs_lt, app, ); root.push(item); mod_app.push(constructor); } // `${task}Resources` if !task.args.shared_resources.is_empty() { let (item, constructor) = shared_resources_struct::codegen( Context::HardwareTask(name), &mut shared_needs_lt, app, ); root.push(item); mod_app.push(constructor); } root.push(module::codegen( Context::HardwareTask(name), shared_needs_lt, local_needs_lt, app, analysis, extra, )); let user_hardware_task_doc = &format!(" User HW task: {name}"); if !task.is_extern { let attrs = &task.attrs; let cfgs = &task.cfgs; let context = &task.context; let stmts = &task.stmts; user_tasks.push(quote!( #[doc = #user_hardware_task_doc] #(#attrs)* #(#cfgs)* #[allow(non_snake_case)] fn #name(#context: #name::Context) { use rtic::Mutex as _; use rtic::mutex::prelude::*; #(#stmts)* } )); } } (mod_app, root, user_tasks) } ion value='derrick/fix/http-lowercase-headers'>derrick/fix/http-lowercase-headers Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2022-06-22Better error for undefined memory hereGravatar Jarred Sumner 1-1/+3
2022-06-22Preallocate some event loop tasksGravatar Jarred Sumner 1-0/+3
2022-06-22Fix bugs with fifo tweaksGravatar Jarred Sumner 1-25/+27
2022-06-22Update test_command.zigGravatar Jarred Sumner 1-23/+120
2022-06-22`bun wiptest` improve test runner outputGravatar Jarred Sumner 1-25/+31
2022-06-22Sending worksGravatar Jarred Sumner 17-670/+1363
2022-06-22implement a custom websocket clientGravatar Jarred Sumner 9-75/+1171
2022-06-22It connects! but the frames are corruptGravatar Jarred Sumner 3-31/+34
2022-06-22WebSocket is a globalGravatar Jarred Sumner 23-266/+350
2022-06-22Fix most of the errorsGravatar Jarred Sumner 6-119/+117
2022-06-22more codeGravatar Jarred Sumner 4-58/+209
2022-06-22WIP WebSocketGravatar Jarred Sumner 19-22/+3701
2022-06-20Group zsh completion options by type (#194)Gravatar Alexander Kuznetsov 1-28/+16
2022-06-17Import most of `MessageEvent` from WebKitGravatar Jarred Sumner 18-12/+1410
2022-06-15some more testsGravatar Jarred Sumner 2-10/+62
2022-06-15Update WebKitGravatar Jarred Sumner 1-0/+0
2022-06-15[web standards] Add `CloseEvent` from WebKitGravatar Jarred Sumner 9-6/+636
2022-06-15Fix lazy loading internal streamsGravatar Jarred Sumner 13-360/+424
2022-06-15direct streams mostly workjarred/directGravatar Jarred Sumner 26-1167/+1782
2022-06-15wip direct streamsGravatar Jarred Sumner 24-398/+2276
2022-06-12ArrayBufferSink works and it's good.Gravatar Jarred Sumner 26-170/+2054
2022-06-12Fix build issueGravatar Jarred Sumner 2-0/+6
2022-06-12Delete broken submoduleGravatar Jarred Sumner 1-0/+0
2022-06-10Update Dockerfile.baseGravatar Jarred Sumner 1-1/+1
2022-06-10Update WebKitGravatar Jarred Sumner 1-0/+0
2022-06-10Update event_loop.zigGravatar Jarred Sumner 1-0/+1
2022-06-10Missing errno on linuxGravatar Jarred Sumner 1-3/+1
2022-06-10Update js_parser.zigGravatar Jarred Sumner 1-21/+200
2022-06-10Update MakefileGravatar Jarred Sumner 1-4/+4
2022-06-10wip fix linux buildGravatar Jarred Sumner 1-9/+11
2022-06-10Don't show generic crash info when given invalid bunfig.tomlGravatar Jarred Sumner 1-0/+4
2022-06-10Update logger.zigGravatar Jarred Sumner 1-0/+4
2022-06-10Show tracingGravatar Jarred Sumner 1-1/+1
2022-06-10Update bunfig.zigGravatar Jarred Sumner 1-0/+1
2022-06-10Update jest.zigGravatar Jarred Sumner 1-6/+9
2022-06-09Update bun.d.tsGravatar Jarred Sumner 1-2/+5
2022-06-09Add typesGravatar Jarred Sumner 1-2/+32
2022-06-09`new Response(stream).arrayBuffer()` + 3 moreGravatar Jarred Sumner 16-39/+478
2022-06-09fix some memory leaks with stringsGravatar Jarred Sumner 4-28/+45
2022-06-09Support console.log(myBigInt)Gravatar Jarred Sumner 1-1/+6
2022-06-09Fix defaultProps with JSX optimizationGravatar Jarred Sumner 6-34/+73
2022-06-09small perf improvements to encodingGravatar Jarred Sumner 1-43/+37
2022-06-07Update event_loop.zigGravatar Jarred Sumner 1-1/+2