Split a code
This commit is contained in:
parent
56c68af52e
commit
3eb9321b27
45
src/main.rs
45
src/main.rs
|
@ -1,52 +1,20 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
#![no_main]
|
#![no_main]
|
||||||
|
|
||||||
use core::cmp::Ordering;
|
mod model;
|
||||||
|
|
||||||
use bxcan::Frame;
|
|
||||||
use heapless::binary_heap::{BinaryHeap, Max};
|
|
||||||
use panic_halt as _;
|
use panic_halt as _;
|
||||||
use stm32f1xx_hal::pac::Interrupt;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct PriorityFrame(Frame);
|
|
||||||
|
|
||||||
impl Ord for PriorityFrame {
|
|
||||||
fn cmp(&self, other: &Self) -> Ordering {
|
|
||||||
self.0.priority().cmp(&other.0.priority())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialOrd for PriorityFrame {
|
|
||||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
|
||||||
Some(self.cmp(other))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl PartialEq for PriorityFrame {
|
|
||||||
fn eq(&self, other: &Self) -> bool {
|
|
||||||
self.cmp(other) == Ordering::Equal
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Eq for PriorityFrame {}
|
|
||||||
|
|
||||||
fn enqueue_frame(queue: &mut BinaryHeap<PriorityFrame, Max, 16>, frame: Frame) {
|
|
||||||
queue.push(PriorityFrame(frame)).unwrap();
|
|
||||||
rtic::pend(Interrupt::USB_HP_CAN_TX);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[rtic::app(device = stm32f1xx_hal::pac)]
|
#[rtic::app(device = stm32f1xx_hal::pac)]
|
||||||
mod app {
|
mod app {
|
||||||
use heapless::binary_heap::{BinaryHeap, Max};
|
use crate::model::PriorityFrame;
|
||||||
|
|
||||||
use super::{enqueue_frame, PriorityFrame};
|
|
||||||
use bxcan::{filter::Mask32, Fifo, Frame, Interrupts, Rx0, StandardId, Tx};
|
use bxcan::{filter::Mask32, Fifo, Frame, Interrupts, Rx0, StandardId, Tx};
|
||||||
|
use heapless::binary_heap::{BinaryHeap, Max};
|
||||||
use stm32f1xx_hal::{
|
use stm32f1xx_hal::{
|
||||||
can::Can,
|
can::Can,
|
||||||
device::TIM2,
|
device::TIM2,
|
||||||
gpio::{Output, Pin},
|
gpio::{Output, Pin},
|
||||||
pac::CAN1,
|
pac::{CAN1, Interrupt},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
timer::Delay,
|
timer::Delay,
|
||||||
};
|
};
|
||||||
|
@ -130,6 +98,11 @@ mod app {
|
||||||
[b[0], b[1], b[0], b[1], b[0], b[1], b[0], b[1]]
|
[b[0], b[1], b[0], b[1], b[0], b[1], b[0], b[1]]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn enqueue_frame(queue: &mut BinaryHeap<PriorityFrame, Max, 16>, frame: Frame) {
|
||||||
|
queue.push(PriorityFrame(frame)).unwrap();
|
||||||
|
rtic::pend(Interrupt::USB_HP_CAN_TX);
|
||||||
|
}
|
||||||
|
|
||||||
#[idle(shared = [can_tx_queue, tx_count], local = [delay])]
|
#[idle(shared = [can_tx_queue, tx_count], local = [delay])]
|
||||||
fn idle(cx: idle::Context) -> ! {
|
fn idle(cx: idle::Context) -> ! {
|
||||||
let mut tx_queue = cx.shared.can_tx_queue;
|
let mut tx_queue = cx.shared.can_tx_queue;
|
||||||
|
|
26
src/model.rs
Normal file
26
src/model.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
use core::cmp::Ordering;
|
||||||
|
|
||||||
|
use bxcan::Frame;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct PriorityFrame(pub Frame);
|
||||||
|
|
||||||
|
impl Ord for PriorityFrame {
|
||||||
|
fn cmp(&self, other: &Self) -> Ordering {
|
||||||
|
self.0.priority().cmp(&other.0.priority())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialOrd for PriorityFrame {
|
||||||
|
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||||
|
Some(self.cmp(other))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PartialEq for PriorityFrame {
|
||||||
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
self.cmp(other) == Ordering::Equal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Eq for PriorityFrame {}
|
Loading…
Reference in New Issue
Block a user