use span in uart interface
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
hal::uart *uart_stdio;
|
hal::uart *uart_stdio;
|
||||||
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
|
|||||||
{
|
{
|
||||||
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
||||||
{
|
{
|
||||||
uart_stdio->write_array(ptr, len);
|
uart_stdio->write(std::span<const char>(ptr, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
@@ -10,11 +10,6 @@ class uart
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(std::uint32_t baudrate) = 0;
|
virtual void init(std::uint32_t baudrate) = 0;
|
||||||
virtual void write_array(const char * ptr, std::size_t len) = 0;
|
virtual void write(std::span<const char> data) = 0;
|
||||||
|
|
||||||
virtual void write(std::span<const char> data)
|
|
||||||
{
|
|
||||||
write_array(data.data(), data.size());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}; // namespace hal
|
}; // namespace hal
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class uart_stm32 : public uart
|
|||||||
|
|
||||||
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
||||||
|
|
||||||
void write_array(const char * ptr, std::size_t len) override;
|
void write(std::span<const char> data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UART_HandleTypeDef huart_;
|
UART_HandleTypeDef huart_;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
|
|||||||
HAL_UART_Init(&huart_);
|
HAL_UART_Init(&huart_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
|
void hal::uart_stm32::write(std::span<const char> data)
|
||||||
{
|
{
|
||||||
// we must cast away costness due to ST HAL's API
|
// we must cast away costness due to ST HAL's API
|
||||||
char * data_ptr = const_cast<char *>(ptr);
|
char * data_ptr = const_cast<char *>(data.data());
|
||||||
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
|
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
|
||||||
HAL_MAX_DELAY);
|
HAL_MAX_DELAY);
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ set(CMAKE_SIZE "arm-none-eabi-size")
|
|||||||
set(RENODE "renode" CACHE STRING "Path to Renode executable")
|
set(RENODE "renode" CACHE STRING "Path to Renode executable")
|
||||||
|
|
||||||
set(MAIN_CPP_PATH "${CMAKE_SOURCE_DIR}/app/src/")
|
set(MAIN_CPP_PATH "${CMAKE_SOURCE_DIR}/app/src/")
|
||||||
set(MAIN_CPP_FILE_NAME "main_integer_promotion.cpp" CACHE STRING "main file")
|
set(MAIN_CPP_FILE_NAME "main_usual_arithmetic_conversion.cpp" CACHE STRING "main file")
|
||||||
list(APPEND LIB_SPECS "-specs=nosys.specs")
|
list(APPEND LIB_SPECS "-specs=nosys.specs")
|
||||||
list(APPEND LIB_SPECS "-specs=nano.specs")
|
list(APPEND LIB_SPECS "-specs=nano.specs")
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
hal::uart *uart_stdio;
|
hal::uart *uart_stdio;
|
||||||
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
|
|||||||
{
|
{
|
||||||
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
||||||
{
|
{
|
||||||
uart_stdio->write_array(ptr, len);
|
uart_stdio->write(std::span<const char>(ptr, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
@@ -10,11 +10,6 @@ class uart
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(std::uint32_t baudrate) = 0;
|
virtual void init(std::uint32_t baudrate) = 0;
|
||||||
virtual void write_array(const char * ptr, std::size_t len) = 0;
|
virtual void write(std::span<const char> data) = 0;
|
||||||
|
|
||||||
virtual void write(std::span<const char> data)
|
|
||||||
{
|
|
||||||
write_array(data.data(), data.size());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}; // namespace hal
|
}; // namespace hal
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class uart_stm32 : public uart
|
|||||||
|
|
||||||
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
||||||
|
|
||||||
void write_array(const char * ptr, std::size_t len) override;
|
void write(std::span<const char> data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UART_HandleTypeDef huart_;
|
UART_HandleTypeDef huart_;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
|
|||||||
HAL_UART_Init(&huart_);
|
HAL_UART_Init(&huart_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
|
void hal::uart_stm32::write(std::span<const char> data)
|
||||||
{
|
{
|
||||||
// we must cast away costness due to ST HAL's API
|
// we must cast away costness due to ST HAL's API
|
||||||
char * data_ptr = const_cast<char *>(ptr);
|
char * data_ptr = const_cast<char *>(data.data());
|
||||||
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
|
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
|
||||||
HAL_MAX_DELAY);
|
HAL_MAX_DELAY);
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
hal::uart *uart_stdio;
|
hal::uart *uart_stdio;
|
||||||
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
|
|||||||
{
|
{
|
||||||
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
||||||
{
|
{
|
||||||
uart_stdio->write_array(ptr, len);
|
uart_stdio->write(std::span<const char>(ptr, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
@@ -10,11 +10,6 @@ class uart
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(std::uint32_t baudrate) = 0;
|
virtual void init(std::uint32_t baudrate) = 0;
|
||||||
virtual void write_array(const char * ptr, std::size_t len) = 0;
|
virtual void write(std::span<const char> data) = 0;
|
||||||
|
|
||||||
virtual void write(std::span<const char> data)
|
|
||||||
{
|
|
||||||
write_array(data.data(), data.size());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}; // namespace hal
|
}; // namespace hal
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class uart_stm32 : public uart
|
|||||||
|
|
||||||
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
||||||
|
|
||||||
void write_array(const char * ptr, std::size_t len) override;
|
void write(std::span<const char> data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UART_HandleTypeDef huart_;
|
UART_HandleTypeDef huart_;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
|
|||||||
HAL_UART_Init(&huart_);
|
HAL_UART_Init(&huart_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
|
void hal::uart_stm32::write(std::span<const char> data)
|
||||||
{
|
{
|
||||||
// we must cast away costness due to ST HAL's API
|
// we must cast away costness due to ST HAL's API
|
||||||
char * data_ptr = const_cast<char *>(ptr);
|
char * data_ptr = const_cast<char *>(data.data());
|
||||||
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
|
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
|
||||||
HAL_MAX_DELAY);
|
HAL_MAX_DELAY);
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
hal::uart *uart_stdio;
|
hal::uart *uart_stdio;
|
||||||
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
|
|||||||
{
|
{
|
||||||
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
||||||
{
|
{
|
||||||
uart_stdio->write_array(ptr, len);
|
uart_stdio->write(std::span<const char>(ptr, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
@@ -10,11 +10,6 @@ class uart
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(std::uint32_t baudrate) = 0;
|
virtual void init(std::uint32_t baudrate) = 0;
|
||||||
virtual void write_array(const char * ptr, std::size_t len) = 0;
|
virtual void write(std::span<const char> data) = 0;
|
||||||
|
|
||||||
virtual void write(std::span<const char> data)
|
|
||||||
{
|
|
||||||
write_array(data.data(), data.size());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}; // namespace hal
|
}; // namespace hal
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class uart_stm32 : public uart
|
|||||||
|
|
||||||
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
||||||
|
|
||||||
void write_array(const char * ptr, std::size_t len) override;
|
void write(std::span<const char> data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UART_HandleTypeDef huart_;
|
UART_HandleTypeDef huart_;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
|
|||||||
HAL_UART_Init(&huart_);
|
HAL_UART_Init(&huart_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
|
void hal::uart_stm32::write(std::span<const char> data)
|
||||||
{
|
{
|
||||||
// we must cast away costness due to ST HAL's API
|
// we must cast away costness due to ST HAL's API
|
||||||
char * data_ptr = const_cast<char *>(ptr);
|
char * data_ptr = const_cast<char *>(data.data());
|
||||||
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
|
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
|
||||||
HAL_MAX_DELAY);
|
HAL_MAX_DELAY);
|
||||||
}
|
}
|
||||||
@@ -51,8 +51,6 @@ int main()
|
|||||||
|
|
||||||
// RCC->CR = 0xDEADBEEF;
|
// RCC->CR = 0xDEADBEEF;
|
||||||
rcc::write(0xDEADBEEF);
|
rcc::write(0xDEADBEEF);
|
||||||
auto val = rcc::read();
|
|
||||||
printf("val = %ld\r\n", val);
|
|
||||||
|
|
||||||
print_reg(&(RCC->CR));
|
print_reg(&(RCC->CR));
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
hal::uart *uart_stdio;
|
hal::uart *uart_stdio;
|
||||||
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
|
|||||||
{
|
{
|
||||||
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
|
||||||
{
|
{
|
||||||
uart_stdio->write_array(ptr, len);
|
uart_stdio->write(std::span<const char>(ptr, len));
|
||||||
}
|
}
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
@@ -10,11 +10,6 @@ class uart
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void init(std::uint32_t baudrate) = 0;
|
virtual void init(std::uint32_t baudrate) = 0;
|
||||||
virtual void write_array(const char * ptr, std::size_t len) = 0;
|
virtual void write(std::span<const char> data) = 0;
|
||||||
|
|
||||||
virtual void write(std::span<const char> data)
|
|
||||||
{
|
|
||||||
write_array(data.data(), data.size());
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}; // namespace hal
|
}; // namespace hal
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class uart_stm32 : public uart
|
|||||||
|
|
||||||
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
void init(std::uint32_t baudrate = c_baudrate_default) override;
|
||||||
|
|
||||||
void write_array(const char * ptr, std::size_t len) override;
|
void write(std::span<const char> data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UART_HandleTypeDef huart_;
|
UART_HandleTypeDef huart_;
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
|
|||||||
HAL_UART_Init(&huart_);
|
HAL_UART_Init(&huart_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
|
void hal::uart_stm32::write(std::span<const char> data)
|
||||||
{
|
{
|
||||||
// we must cast away costness due to ST HAL's API
|
// we must cast away costness due to ST HAL's API
|
||||||
char * data_ptr = const_cast<char *>(ptr);
|
char * data_ptr = const_cast<char *>(data.data());
|
||||||
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
|
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
|
||||||
HAL_MAX_DELAY);
|
HAL_MAX_DELAY);
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user