Split a code

This commit is contained in:
yanorei32 2023-10-11 01:42:22 +09:00
parent 56c68af52e
commit 3eb9321b27
2 changed files with 35 additions and 36 deletions

View File

@ -1,52 +1,20 @@
#![no_std]
#![no_main]
use core::cmp::Ordering;
mod model;
use bxcan::Frame;
use heapless::binary_heap::{BinaryHeap, Max};
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)]
mod app {
use heapless::binary_heap::{BinaryHeap, Max};
use super::{enqueue_frame, PriorityFrame};
use crate::model::PriorityFrame;
use bxcan::{filter::Mask32, Fifo, Frame, Interrupts, Rx0, StandardId, Tx};
use heapless::binary_heap::{BinaryHeap, Max};
use stm32f1xx_hal::{
can::Can,
device::TIM2,
gpio::{Output, Pin},
pac::CAN1,
pac::{CAN1, Interrupt},
prelude::*,
timer::Delay,
};
@ -130,6 +98,11 @@ mod app {
[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])]
fn idle(cx: idle::Context) -> ! {
let mut tx_queue = cx.shared.can_tx_queue;

26
src/model.rs Normal file
View 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 {}