Commit Graph

218 Commits

Author SHA1 Message Date
huntc
076198a3b9 Small tidy up 2021-07-15 12:31:53 +10:00
huntc
d711e8a82c Eliminates unsoundness by using an UnsafeCell for sharing the channel 2021-07-15 12:31:53 +10:00
huntc
babee7f32a Tighten sender/receiver bounds 2021-07-15 12:31:53 +10:00
huntc
d86892ca56 Removed the closing state as it was not required 2021-07-15 12:31:53 +10:00
huntc
a247fa4f2c Explicitly drop non consumed items 2021-07-15 12:31:53 +10:00
huntc
7c723d2bfd Removed UB code around the send future 2021-07-15 12:31:52 +10:00
huntc
baab52d40c Avoid a race condition by reducing the locks to one 2021-07-15 12:31:52 +10:00
huntc
5a5795ef2b NoopMutex does not require an UnsafeCell 2021-07-15 12:31:52 +10:00
huntc
9b5f2e465b Tidying 2021-07-15 12:31:52 +10:00
huntc
108cffcba0 Migrated to the waker registration functionality for Embassy specific optimisations 2021-07-15 12:31:52 +10:00
huntc
dcd0c38109 Return a new future each time recv is called 2021-07-15 12:31:52 +10:00
huntc
f159beec1c Use of a NoopMutex 2021-07-15 12:31:52 +10:00
huntc
5f87c7808c Remove the cell and trait
At the expense of exposing the channel types again. We do this as we want to avoid using dyn traits given their overhead for embedded environments.
2021-07-15 12:31:52 +10:00
huntc
56b3e927fe ChannelState should be private 2021-07-15 12:31:52 +10:00
huntc
3fdf61c819 Constraint the use of ChannelCell to just channels 2021-07-15 12:31:52 +10:00
huntc
ae62948d6c Replace UnsafeCell
Using a new ChannelCell so that there's no leaking of the abstraction
2021-07-15 12:31:52 +10:00
huntc
1b49acc2f7 Fixed some clippy warnings 2021-07-15 12:31:52 +10:00
huntc
a156f72bfb Improves the representation of side effects 2021-07-15 12:31:52 +10:00
huntc
816b78c0d9 Reduces the types on sender and receiver
In exchange for an UnsafeCell being passed into split
2021-07-15 12:31:52 +10:00
huntc
1b9d5e5071 Multi Producer Single Consumer channel
An MPSC inspired by Tokio and Crossbeam. The MPSC is designed to support both single and multi core processors, with only single core implemented at this time. The allocation of the channel’s buffer is inspired by the const generic parameters that Heapless provides.
2021-07-15 12:31:52 +10:00
Dario Nieuwenhuis
c210a6efd1 embassy/time: remove useless impl 2021-07-12 03:45:48 +02:00
Dario Nieuwenhuis
16bb678368 Merge BlockingTimer and Delay 2021-07-12 03:45:48 +02:00
Dario Nieuwenhuis
35a76c364a embassy/time: make optional via Cargo feature 2021-07-12 03:45:48 +02:00
Dario Nieuwenhuis
94bd4eb7d5 embassy/time: refactor module structure 2021-07-12 03:45:48 +02:00
huntc
e13aa4c2a0 Add tests to our CI
Also found some doctests that were failing
2021-07-06 12:29:08 +10:00
Rukai
56d0c5ffe1 Fix warnings in std and rp 2021-07-04 12:46:04 +10:00
Thales Fragoso
51583afc1e Add docs for BlockingTimer and rename tick features 2021-06-28 18:52:27 -03:00
Thales Fragoso
54197d1663 Add BlockingTimer and features to choose tick rate 2021-06-28 18:01:40 -03:00
Dario Nieuwenhuis
3be49d3e79 fmt: Add dunmy use to avoid "unused variable" errors when no log is enabled. 2021-06-07 03:21:37 +02:00
Dario Nieuwenhuis
ef1ebefec0 fmt: use absolute paths 2021-06-07 03:15:05 +02:00
Dario Nieuwenhuis
e7dc5c0939 fmt: make all macros macro_rules so scoping is consistent. 2021-06-07 00:16:39 +02:00
Timo Kröger
628e58020f Add Unborrow trait bound for Interrupt
Allows the compiler to figure out bounds for wrapper code of owned
peripherals and interrupts.
Example: https://gist.github.com/timokroeger/f025ef590557f1cd6c2e9c7ab30442d2
2021-06-04 23:42:25 +02:00
Ulf Lilleengen
ec9b51833c Allow non-mut register and wake 2021-06-01 15:18:53 +02:00
Dario Nieuwenhuis
1c0ad53841 Unborrow docs 2021-05-19 23:39:45 +02:00
Dario Nieuwenhuis
105c8504b6 Mark Unborrow as unsafe to implement 2021-05-19 23:29:33 +02:00
Dario Nieuwenhuis
dc67d2f4a4 impl Unborrow for &'a mut T
This plays nicer with user code that's generic over peripheral traits like `Instance` or `Pin`.
2021-05-19 23:20:26 +02:00
Dario Nieuwenhuis
a8902b0592 Fix build with executor-agnostic 2021-05-19 13:00:01 +02:00
Dario Nieuwenhuis
cd0d3c4b0d Merge branch 'stm32-neo' 2021-05-17 02:16:17 +02:00
Thales Fragoso
490152d028 Better interrupt handling 2021-05-14 23:42:09 -03:00
Ulf Lilleengen
3b86e85770 Bump version of critical-section to 0.2.1 2021-05-13 18:17:50 +02:00
Dario Nieuwenhuis
7fa0e57172 Use critical_section crate 2021-05-11 01:15:30 +02:00
Rukai
6c3299c82f Fix build on the latest nightly 2021-05-10 00:36:23 +02:00
Rukai
ab00c6987a Fix build on the latest nightly 2021-05-08 13:23:17 +10:00
Dario Nieuwenhuis
97ca54fa66 Rename PeripheralBorrow to Unborrow 2021-04-14 19:59:52 +02:00
Dario Nieuwenhuis
d336a4b38a Remove Pin from Delay trait 2021-04-14 17:04:40 +02:00
Dario Nieuwenhuis
fa8dc796a7 Workaround broken cast crate 2021-04-12 13:30:21 +02:00
Ulf Lilleengen
708e622ab0 Allow signals to be used when building for std 2021-04-12 12:06:42 +02:00
xoviat
009e1896bf stm32: consolidate crates 2021-03-30 10:05:52 -05:00
xoviat
49d87ac868 add with_timeout 2021-03-29 15:48:57 -05:00
Dario Nieuwenhuis
d7c3a38efc Reexport macros at root, use eveywhere as #[embassy::task] 2021-03-29 03:00:48 +02:00
Dario Nieuwenhuis
1c9f98e1b6 nrf/gpiote: fix irq race condition
The interrupt could fire between checking if sense=disabled and registering the waker,
in which case the future would get stuck.
2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
4ce46df160 Code size optimizations. 2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
0e8bb5dc0b util: Do not unregister waker on wake in AtomicWaker. 2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
df42c38492 nrf/uarte: update to new api 2021-03-29 00:58:58 +02:00
Dario Nieuwenhuis
a134fce122 nrf: nicer Peripherals api, add take() 2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
ba6e0a4058 util: add wake_on_interrupt.
This is a lighter version of InterruptFuture.
2021-03-29 00:58:57 +02:00
Dario Nieuwenhuis
9c4087ac5c Introduce PeripheralBorrow trait 2021-03-29 00:58:57 +02:00
xoviat
6ee9e012fc add embassy::main and implement for stm32f4 2021-03-27 17:27:39 -05:00
Joshua Salzedo
ea650b684c
its /// not //. 2021-03-24 13:31:08 -07:00
Joshua Salzedo
18d3c803de
Add missing newlines 2021-03-24 13:21:32 -07:00
Joshua Salzedo
40617fea04
Document embassy::util::signal & embassy::util 2021-03-24 13:19:36 -07:00
Joshua Salzedo
62009150bd
Document embassy::util::InterruptFuture 2021-03-24 13:19:36 -07:00
Joshua Salzedo
a9e099c215
Document embassy::util::Forever 2021-03-24 13:19:36 -07:00
Joshua Salzedo
da59112e86
Document the DropBomb 2021-03-24 13:19:35 -07:00
Joshua Salzedo
8fbe83ac26
Added remainder of the docs for embassy::time's public interface. 2021-03-21 18:30:03 -07:00
Joshua Salzedo
42be860446
Correct descriptions of Duration 2021-03-21 17:11:30 -07:00
Joshua Salzedo
7988b78107
remove now redundant non-doc comment 2021-03-21 17:05:36 -07:00
Joshua Salzedo
10f14747c3
Fix module-level docstring 2021-03-21 17:05:22 -07:00
Joshua Salzedo
e363607d70
Added doc to the embassy::time::Duration struct 2021-03-21 17:01:52 -07:00
Joshua Salzedo
f8d63279ef
Re-add erroneously removed newlines 2021-03-21 17:01:13 -07:00
Joshua Salzedo
dcdd768e03 Add Struct/impl documentation for embassy::time::Instant 2021-03-21 16:45:53 -07:00
Joshua Salzedo
d453b9dd95 Add Struct/impl documentation for embassy::time::Duration 2021-03-21 16:45:48 -07:00
Joshua Salzedo
cf1323fb67 Add module-level documentation for embassy::time 2021-03-21 16:45:24 -07:00
Michael Beaumont
d3673886b3
Run cargo fmt 2021-03-18 20:02:42 +01:00
Dario Nieuwenhuis
f248bb17ad Allow unused stuff in fmt.rs 2021-03-18 01:42:28 +01:00
Dario Nieuwenhuis
8c2da193b8 Add spawn/spawn_pool APIs to Task 2021-03-18 00:38:27 +01:00
Dario Nieuwenhuis
5c2bf3981e Move Task into raw 2021-03-18 00:20:11 +01:00
Dario Nieuwenhuis
278ce02824 Rename IrqExecutor to InterruptExecutor 2021-03-17 22:52:57 +01:00
Dario Nieuwenhuis
a9076636ac Do not export fmt macros.
This was introduced by accident by me struggling with the weird intra-crate macro importing system...
2021-03-17 22:50:27 +01:00
Dario Nieuwenhuis
bb68f5d0e8 Add optimized single-word WakerRegistration, add AtomicWakerRegistration. 2021-03-17 02:53:41 +01:00
Dario Nieuwenhuis
ab01e0be3b Do not reexport atomic-polyfill 2021-03-17 02:52:21 +01:00
Dario Nieuwenhuis
6ed1a87138 Update features for latest nightly. 2021-03-17 02:48:16 +01:00
Dario Nieuwenhuis
bd3deb785a Update deps 2021-03-04 22:41:54 +01:00
Dario Nieuwenhuis
18f6b8ad68 thumbv6m support with emulated atomics 2021-03-04 21:56:31 +01:00
Dario Nieuwenhuis
88946840d1 Make Delay public 2021-03-02 21:16:43 +01:00
Dario Nieuwenhuis
d4f2c6cf00 Remove cargo namespaced-features 2021-03-02 21:15:12 +01:00
xoviat
7ef81c75e7 traits: add delay trait
delay allows downstream libraries
to use async delay without depending
on a specific delay implementation
2021-03-02 08:45:22 -06:00
xoviat
9626aee7db Move traits to separate crate. 2021-03-02 00:32:23 +01:00
Dario Nieuwenhuis
084b64053a
Merge pull request #61 from xoviat/us-delay
add us delays
2021-03-01 19:06:57 +01:00
xoviat
a7549108a8 rename methods 2021-03-01 11:59:40 -06:00
xoviat
d029f651fa add us delays 2021-03-01 11:47:55 -06:00
Dario Nieuwenhuis
45355f184a move most interrupt methods to InterruptExt extension trait. Fixes #35 2021-03-01 00:44:38 +01:00
Dario Nieuwenhuis
7433dc1039 Port qspi to PeripheralMutex 2021-02-28 22:05:37 +01:00
Dario Nieuwenhuis
da91779117 interrupt: Split set_handler context.
Since introducing the ctx pointer, the handler is now two words, so setting it can
race with the interrupt firing. On race it's possible for the new handler to be
alled with the old ctx pointer or viceversa.

Rather than documenting this, it's better to split the function in two to make it
obvious to the user that it's not atomic. The user can use a critical section, or
disable/enable the interrupt to avoid races if this is a concern.
2021-02-26 02:04:48 +01:00
Dario Nieuwenhuis
17cf301d4f Remove rand(), fixes #50 2021-02-26 01:58:00 +01:00
Dario Nieuwenhuis
11be9170ec Cleanup interrupt package naming. Fixes #40
The `interrupt` package previously tried to be drop-in compatible with the
`interrupt` package from PACs. THis meant that there was both a PAC-style enum
value `UARTE0` and an embassy-style owned `UARTE0Interrupt` type. This made
things VERY confusing.

This drops compatibility with the PAC, improving the names for embassy interrupts.
2021-02-26 01:55:27 +01:00
Dario Nieuwenhuis
90476ef900 Fix some warnings. 2021-02-26 01:06:58 +01:00
fnafnio
f779ec4928 update defmt and defmt-rtt to 0.2.0 2021-02-24 08:44:23 +01:00
Dario Nieuwenhuis
7321ddb0b3 Update to cortex-m 0.7 2021-02-14 23:26:50 +01:00
Thales Fragoso
b69f72e055 Get rid of some warnings 2021-02-13 21:41:36 -03:00