Skip to content

BRA1L0R/palloc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Palloc

docs.rs crates.io

Portable linked-list allocator for embedded / baremetal systems.

Using the crate

Include this in the [dependencies] section of Cargo.toml

palloc = "0.1.0"

This crate uses unstable features of Rust, so it requires the nightly update channel. Update the toolchain for your project folder with:

rustup override set nightly

Crate features

  • spin (default): provides a GlobalAllocator implementation using a spin lock.
  • allocator_api (default): enables the Allocator trait and implements it on all global allocators.

Example

#![no_std]

use core::ptr::NonNull;
use palloc::{GlobalPalloc, SpinPalloc};

// the allocator is initialized using a const empty function, but it is
// not ready yet, we must initialize it first in main.
#[global_allocator]
static mut ALLOCATOR: SpinPalloc = SpinPalloc::empty();

fn main() {
    // First of all we must define the bounds of our heap. Check
    // Palloc or GlobalPalloc documentation for informations.

    // Heap starting address
    let heap_start = 0x8000 as *mut u8;
    // Heap size
    let heap_size = 0xF000;

    // accessing statics is an unsafe operation
    // so it must be sorrounded by an unsafe block
    unsafe { ALLOCATOR.init(NonNull::new(heap_start).unwrap(), heap_size) };

    // we can now use the heap!
    // ...
}

Documentation

Everything you need to know is already written in the rustdocs. Click on the badge under the readme's title or click here to read the full documentation.

About

Portable linked-list allocator designed for baremetal systems

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages