Add console_test example to stress-test Tock's console driver.
This commit is contained in:
@@ -913,6 +913,13 @@ if __name__ == "__main__":
|
|||||||
const="oom_test",
|
const="oom_test",
|
||||||
help=("Compiles and installs the oom_test example that tests the "
|
help=("Compiles and installs the oom_test example that tests the "
|
||||||
"allocator until an out-of-memory error occurs."))
|
"allocator until an out-of-memory error occurs."))
|
||||||
|
apps_group.add_argument(
|
||||||
|
"--console_test",
|
||||||
|
dest="application",
|
||||||
|
action="store_const",
|
||||||
|
const="console_test",
|
||||||
|
help=("Compiles and installs the console_test example that tests the "
|
||||||
|
"console driver with messages of various lengths."))
|
||||||
|
|
||||||
main_parser.set_defaults(features=["with_ctap1"])
|
main_parser.set_defaults(features=["with_ctap1"])
|
||||||
|
|
||||||
|
|||||||
33
examples/console_test.rs
Normal file
33
examples/console_test.rs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
// Copyright 2020 Google LLC
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
#![no_std]
|
||||||
|
|
||||||
|
extern crate lang_items;
|
||||||
|
|
||||||
|
use libtock_drivers::console::{Console, BUFFER_SIZE};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Write messages of length up to the console driver's buffer size.
|
||||||
|
let mut buf = [0; BUFFER_SIZE];
|
||||||
|
loop {
|
||||||
|
for i in 1..buf.len() {
|
||||||
|
for j in 0..i {
|
||||||
|
buf[j] = b'0' + ((i % 10) as u8);
|
||||||
|
}
|
||||||
|
buf[i] = b'\n';
|
||||||
|
Console::write_unbuffered(&mut buf[..(i + 1)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
14
third_party/libtock-drivers/src/console.rs
vendored
14
third_party/libtock-drivers/src/console.rs
vendored
@@ -17,7 +17,7 @@ mod allow_nr {
|
|||||||
pub const SHARE_BUFFER: usize = 1;
|
pub const SHARE_BUFFER: usize = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const BUFFER_SIZE: usize = 1024;
|
pub const BUFFER_SIZE: usize = 1024;
|
||||||
|
|
||||||
pub struct Console {
|
pub struct Console {
|
||||||
allow_buffer: [u8; BUFFER_SIZE],
|
allow_buffer: [u8; BUFFER_SIZE],
|
||||||
@@ -70,11 +70,13 @@ impl Console {
|
|||||||
// Clear the buffer even in case of error, to avoid an infinite loop.
|
// Clear the buffer even in case of error, to avoid an infinite loop.
|
||||||
self.count_pending = 0;
|
self.count_pending = 0;
|
||||||
|
|
||||||
let result = syscalls::allow(
|
Console::write_unbuffered(&mut self.allow_buffer[..count]);
|
||||||
DRIVER_NUMBER,
|
}
|
||||||
allow_nr::SHARE_BUFFER,
|
|
||||||
&mut self.allow_buffer[..count],
|
pub fn write_unbuffered(buf: &mut [u8]) {
|
||||||
);
|
let count = buf.len();
|
||||||
|
|
||||||
|
let result = syscalls::allow(DRIVER_NUMBER, allow_nr::SHARE_BUFFER, buf);
|
||||||
if result.is_err() {
|
if result.is_err() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user