STM32F103芯片循环队列操作函数
时间: 2024-10-18 22:01:50 浏览: 20
STM32F103系列微控制器是一款基于ARM Cortex-M3内核的32位MCU,虽然它本身并不内置循环队列库,但是你可以通过第三方库如FreeRTOS、CubeMX的HAL库或标准的数据结构来实现自定义的循环队列。
如果你想要创建一个简单的循环队列,可以采用以下步骤:
1. 定义结构体:首先,你需要定义一个包含数据元素的结构体,并为队列分配内存空间。
```c
typedef struct {
uint8_t *data; // 队列存储数据的指针
uint16_t head; // 队头索引
uint16_t tail; // 队尾索引
uint16_t size; // 队列大小
} Queue_TypeDef;
```
2. 初始化函数:初始化队列,设置初始状态。
```c
void queue_Init(Queue_TypeDef *queue, uint16_t queueSize) {
queue->head = 0;
queue->tail = 0;
queue->size = queueSize;
queue->data = (uint8_t *)malloc(queueSize * sizeof(uint8_t)); // 分配内存
}
```
3. 入队操作:将数据添加到队尾。
```c
bool queue_enqueue(Queue_TypeDef *queue, uint8_t value) {
if ((queue->tail + 1) % queue->size == queue->head) { // 满队
return false;
}
queue->data[queue->tail] = value;
queue->tail = (queue->tail + 1) % queue->size;
return true;
}
```
4. 出队操作:从队头取出数据。
```c
uint8_t queue_dequeue(Queue_TypeDef *queue) {
if (queue->head == queue->tail) { // 空队
return -1;
}
uint8_t ret = queue->data[queue->head];
queue->head = (queue->head + 1) % queue->size;
return ret;
}
```
阅读全文