mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/sta-core.git
synced 2025-08-06 18:37:34 +00:00
Updated printable to reduce mutex operations when printing newlines
This commit is contained in:
@@ -27,82 +27,76 @@ namespace sta
|
||||
println(str);
|
||||
}
|
||||
|
||||
void Printable::print(char c)
|
||||
void Printable::print(char c, bool newline /* = false */)
|
||||
{
|
||||
print(&c, 1);
|
||||
print(&c, 1, newline);
|
||||
}
|
||||
|
||||
void Printable::print(bool b)
|
||||
void Printable::print(bool b, bool newline /* = false */)
|
||||
{
|
||||
print(b ? "true" : "false");
|
||||
print(b ? "true" : "false", newline);
|
||||
}
|
||||
|
||||
void Printable::print(double d)
|
||||
void Printable::print(double d, bool newline /* = false */)
|
||||
{
|
||||
char buffer[64];
|
||||
snprintf(buffer, sizeof(buffer), "%f", d);
|
||||
print(buffer);
|
||||
print(buffer, newline);
|
||||
}
|
||||
|
||||
void Printable::print(uint8_t num, IntegerBase base)
|
||||
void Printable::print(uint8_t num, IntegerBase base, bool newline /* = false */)
|
||||
{
|
||||
printBase(num, base, "%" PRIu8, sizeof(num));
|
||||
printBase(num, base, "%" PRIu8, sizeof(num), newline);
|
||||
}
|
||||
|
||||
void Printable::print(uint16_t num, IntegerBase base)
|
||||
void Printable::print(uint16_t num, IntegerBase base, bool newline /* = false */)
|
||||
{
|
||||
printBase(num, base, "%" PRIu16, sizeof(num));
|
||||
printBase(num, base, "%" PRIu16, sizeof(num), newline);
|
||||
}
|
||||
|
||||
void Printable::print(uint32_t num, IntegerBase base)
|
||||
void Printable::print(uint32_t num, IntegerBase base, bool newline /* = false */)
|
||||
{
|
||||
printBase(num, base, "%" PRIu32, sizeof(num));
|
||||
printBase(num, base, "%" PRIu32, sizeof(num), newline);
|
||||
}
|
||||
|
||||
void Printable::print(const char * str)
|
||||
void Printable::print(const char * str, bool newline /* = false */)
|
||||
{
|
||||
print(str, strlen(str));
|
||||
print(str, strlen(str), newline);
|
||||
}
|
||||
|
||||
void Printable::println()
|
||||
{
|
||||
print("\r\n", 2);
|
||||
print("\r\n", 2, false);
|
||||
}
|
||||
|
||||
void Printable::println(char c)
|
||||
{
|
||||
print(&c, 1);
|
||||
println();
|
||||
print(&c, 1, true);
|
||||
}
|
||||
|
||||
void Printable::println(bool b)
|
||||
{
|
||||
print(b);
|
||||
println();
|
||||
print(b, true);
|
||||
}
|
||||
|
||||
void Printable::println(double d)
|
||||
{
|
||||
print(d);
|
||||
println();
|
||||
print(d, true);
|
||||
}
|
||||
|
||||
void Printable::println(uint8_t num, IntegerBase base)
|
||||
{
|
||||
print(num, base);
|
||||
println();
|
||||
print(num, base, true);
|
||||
}
|
||||
|
||||
void Printable::println(uint16_t num, IntegerBase base)
|
||||
{
|
||||
print(num, base);
|
||||
println();
|
||||
print(num, base, true);
|
||||
}
|
||||
|
||||
void Printable::println(uint32_t num, IntegerBase base)
|
||||
{
|
||||
print(num, base);
|
||||
println();
|
||||
print(num, base, true);
|
||||
}
|
||||
|
||||
void Printable::println(const char * str)
|
||||
@@ -112,26 +106,25 @@ namespace sta
|
||||
|
||||
void Printable::println(const char * str, size_t length)
|
||||
{
|
||||
print(str, length);
|
||||
println();
|
||||
print(str, length, true);
|
||||
}
|
||||
|
||||
void Printable::printBase(uintmax_t num, IntegerBase base, const char * fmt, size_t size)
|
||||
void Printable::printBase(uintmax_t num, IntegerBase base, const char * fmt, size_t size, bool newline /* = false */)
|
||||
{
|
||||
switch (base)
|
||||
{
|
||||
case IntegerBase::DEC:
|
||||
printDec(num, fmt);
|
||||
printDec(num, fmt, newline);
|
||||
break;
|
||||
|
||||
case IntegerBase::BIN:
|
||||
// Digits in base 2 = size in bytes * 8
|
||||
printBin(num, size * 8);
|
||||
printBin(num, size * 8, newline);
|
||||
break;
|
||||
|
||||
case IntegerBase::HEX:
|
||||
// Digits in base 16 = size in bytes * 2
|
||||
printHex(num, size * 2);
|
||||
printHex(num, size * 2, newline);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -139,14 +132,14 @@ namespace sta
|
||||
}
|
||||
}
|
||||
|
||||
void Printable::printDec(uintmax_t num, const char * fmt)
|
||||
void Printable::printDec(uintmax_t num, const char * fmt, bool newline /* = false */)
|
||||
{
|
||||
char buffer[64];
|
||||
snprintf(buffer, sizeof(buffer), fmt, static_cast<uint32_t>(num));
|
||||
print(buffer);
|
||||
print(buffer, newline);
|
||||
}
|
||||
|
||||
void Printable::printBin(uintmax_t value, size_t digits)
|
||||
void Printable::printBin(uintmax_t value, size_t digits, bool newline /* = false */)
|
||||
{
|
||||
// Need 8 digits for every byte
|
||||
char buffer[sizeof(value) * 8];
|
||||
@@ -168,10 +161,10 @@ namespace sta
|
||||
buffer[i] = '0' + ((value >> (digits - 1 - i)) & 0x1);
|
||||
}
|
||||
|
||||
print(buffer, digits);
|
||||
print(buffer, digits, newline);
|
||||
}
|
||||
|
||||
void Printable::printHex(uintmax_t value, size_t digits)
|
||||
void Printable::printHex(uintmax_t value, size_t digits, bool newline /* = false */)
|
||||
{
|
||||
// Need 2 digits for every byte
|
||||
char buffer[sizeof(value) * 2];
|
||||
@@ -179,7 +172,7 @@ namespace sta
|
||||
// Check bounds
|
||||
if (digits > sizeof(buffer))
|
||||
{
|
||||
print("<hex_value_too_big>");
|
||||
print("<hex_value_too_big>", newline);
|
||||
return;
|
||||
}
|
||||
// Nothing to do
|
||||
@@ -197,7 +190,7 @@ namespace sta
|
||||
buffer[i] = '0' + hex;
|
||||
}
|
||||
|
||||
print(buffer, digits);
|
||||
print(buffer, digits, newline);
|
||||
}
|
||||
|
||||
} // namespace sta
|
||||
|
@@ -1,5 +1,6 @@
|
||||
#include <sta/debug/printing/printable_printf.hpp>
|
||||
#include <sta/debug/assert.hpp>
|
||||
#include <sta/lang.hpp>
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
@@ -10,11 +11,20 @@ namespace sta
|
||||
|
||||
}
|
||||
|
||||
void PrintablePrintf::print(const char * str, size_t length)
|
||||
void PrintablePrintf::print(const char * str, size_t length, bool newline /* = false */)
|
||||
{
|
||||
STA_ASSERT(str != nullptr);
|
||||
STA_ASSERT(length > 0);
|
||||
|
||||
printf("%.*s", length, str);
|
||||
printf("\r\n");
|
||||
}
|
||||
|
||||
void PrintablePrintf::read(char * str, size_t length)
|
||||
{
|
||||
STA_ASSERT(str != nullptr);
|
||||
STA_ASSERT(length > 0);
|
||||
|
||||
STA_NOT_IMPLEMENTED();
|
||||
}
|
||||
} // namespace sta
|
||||
|
@@ -17,11 +17,21 @@ namespace sta
|
||||
STA_ASSERT(intf->settings().mode == UARTMode::RX || intf->settings().mode == UARTMode::RX_TX);
|
||||
}
|
||||
|
||||
void PrintableUART::print(const char * str, size_t length)
|
||||
void PrintableUART::print(const char * str, size_t length, bool newline /* = false */)
|
||||
{
|
||||
const char * linebreak = "\r\n";
|
||||
|
||||
intf_->acquire();
|
||||
intf_->transfer(reinterpret_cast<const uint8_t *>(str), length);
|
||||
intf_->transfer(reinterpret_cast<const uint8_t *>(linebreak), 2);
|
||||
intf_->release();
|
||||
}
|
||||
|
||||
void PrintableUART::read(char * str, size_t length)
|
||||
{
|
||||
intf_->acquire();
|
||||
intf_->receive(reinterpret_cast<uint8_t *>(str), length);
|
||||
intf_->release();
|
||||
}
|
||||
|
||||
} // namespace sta
|
||||
|
Reference in New Issue
Block a user