refactor(device): 移除备份配置文件并完善ADC模块注释
移除不再需要的 .cproject.yml.bak_dma 和 README.md 备份文件, 同时为 ADC.cpp 添加完整的 Doxygen 风格函数注释,提升代码可读性。
This commit is contained in:
@@ -10,34 +10,84 @@
|
||||
uint8_t Usart0::s_txBuf[Usart0::kTxBufSize];
|
||||
volatile uint16_t Usart0::s_txHead = 0U;
|
||||
volatile uint16_t Usart0::s_txTail = 0U;
|
||||
volatile uint32_t Usart0::s_dropCount = 0U;
|
||||
|
||||
/**
|
||||
* @brief 计算发送环形缓冲区中的下一个索引。
|
||||
* @param[in] idx 当前索引值。
|
||||
* @param[out] 无。
|
||||
* @retval uint16_t 返回环形缓冲区中的下一个索引。
|
||||
*/
|
||||
uint16_t Usart0::nextIndex(uint16_t idx)
|
||||
{
|
||||
return (idx + 1U) % kTxBufSize;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断 USART0 发送缓冲区是否已满。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval bool true 表示发送缓冲区已满,false 表示仍有可写空间。
|
||||
*/
|
||||
bool Usart0::isBufferFull()
|
||||
{
|
||||
return nextIndex(s_txHead) == s_txTail;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 判断 USART0 发送缓冲区是否为空。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval bool true 表示发送缓冲区为空,false 表示仍有待发数据。
|
||||
*/
|
||||
bool Usart0::isBufferEmpty()
|
||||
{
|
||||
return s_txHead == s_txTail;
|
||||
}
|
||||
|
||||
int Usart0::putChar(int ch, FILE *f)
|
||||
/**
|
||||
* @brief 以非阻塞方式向 USART0 发送缓冲写入一个字符。
|
||||
* @param[in] ch 待发送字符。
|
||||
* @param[out] 无。
|
||||
* @retval bool true 表示成功写入发送缓冲,false 表示缓冲已满而被丢弃。
|
||||
* @note 缓冲满时仅增加丢弃计数,不阻塞主流程。
|
||||
*/
|
||||
bool Usart0::putCharNonBlocking(int ch)
|
||||
{
|
||||
(void)f;
|
||||
uint16_t next = nextIndex(s_txHead);
|
||||
while(next == s_txTail) { /* 缓冲满,忙等重试 */ }
|
||||
if(next == s_txTail) {
|
||||
s_dropCount++;
|
||||
return false;
|
||||
}
|
||||
|
||||
s_txBuf[s_txHead] = static_cast<uint8_t>(ch);
|
||||
s_txHead = next;
|
||||
usart_interrupt_enable(USART0, USART_INT_TBE);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 向 USART0 发送缓冲写入一个字符。
|
||||
* @param[in] ch 待发送字符。
|
||||
* @param[in] f 标准流指针。
|
||||
* @param[out] 无。
|
||||
* @retval int 返回写入缓冲的字符值。
|
||||
* @note 当前采用非阻塞写入策略;若缓冲已满则丢弃该字符但仍返回原字符值。
|
||||
*/
|
||||
int Usart0::putChar(int ch, FILE *f)
|
||||
{
|
||||
(void)f;
|
||||
(void)putCharNonBlocking(ch);
|
||||
return ch;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USART0 中断处理入口。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval 无返回值。
|
||||
* @note 处理发送缓冲区的 TBE 中断驱动输出;当缓冲为空时自动关闭发送中断。
|
||||
*/
|
||||
void Usart0::onInterrupt()
|
||||
{
|
||||
if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE) != RESET) {
|
||||
@@ -51,6 +101,13 @@ void Usart0::onInterrupt()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 配置 USART0 对应 GPIO 引脚。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval 无返回值。
|
||||
* @note 将 PA9 配置为复用推挽发送脚,将 PA10 配置为浮空输入接收脚。
|
||||
*/
|
||||
void Usart0::configurePins()
|
||||
{
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
@@ -58,6 +115,13 @@ void Usart0::configurePins()
|
||||
gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化 USART0 外设与中断。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval 无返回值。
|
||||
* @note 使用 `CONFIG_USART0_BAUDRATE` 配置串口参数,并使能 USART0 中断。
|
||||
*/
|
||||
void Usart0::init()
|
||||
{
|
||||
rcu_periph_clock_enable(RCU_USART0);
|
||||
@@ -73,5 +137,21 @@ void Usart0::init()
|
||||
}
|
||||
|
||||
/* ----- 中断入口 / printf 重定向的 C 包装 --------------------------- */
|
||||
/**
|
||||
* @brief 标准库 fputc 重定向入口。
|
||||
* @param[in] ch 待发送字符。
|
||||
* @param[in] f 标准流指针。
|
||||
* @param[out] 无。
|
||||
* @retval int 返回写入缓冲的字符值。
|
||||
* @note 该 C 包装函数内部转调 `Usart0::putChar()`。
|
||||
*/
|
||||
extern "C" int fputc(int ch, FILE *f) { return Usart0::putChar(ch, f); }
|
||||
extern "C" void USART0_IRQHandler(void) { Usart0::onInterrupt(); }
|
||||
|
||||
/**
|
||||
* @brief USART0 中断向量入口。
|
||||
* @param[in] 无。
|
||||
* @param[out] 无。
|
||||
* @retval 无返回值。
|
||||
* @note 该 C 包装函数内部转调 `Usart0::onInterrupt()`。
|
||||
*/
|
||||
extern "C" void USART0_IRQHandler(void) { Usart0::onInterrupt(); }
|
||||
|
||||
Reference in New Issue
Block a user