队列11111

mian.c 

#include "stm32f10x.h"
#include "stm32f10x_pal.h"
#include "queue.h"
#include <string.h>

static Queue_HandleTypeDef hQueue;
static Queue_HandleTypeDef hTxQueue;

static void USART_Echo_Init(void);
static void USART_Echo_Proc(void);
static void USART1_SendString(const char *Str);

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	PAL_Init();
	
	USART_Echo_Init();
	
	while(1)
	{
		USART_Echo_Proc();
	}
}

static void USART_Echo_Init(void)
{
	GPIO_InitTypeDef GPIOInitStruct;
	
	Queue_Init(&hQueue);
	Queue_Init(&hTxQueue);
	
	// 1. 初始化IO引脚
	// PB6 PB7
	// Tx
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_6;
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_Init(GPIOB, &GPIOInitStruct);
	// Rx
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_7;
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOB, &GPIOInitStruct);
	// AFIO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
	
	// 2. 使能USART1的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	// 3. 配置USART1的参数
	USART_InitTypeDef USARTInitStruct;
	USARTInitStruct.USART_BaudRate = 9600;
	USARTInitStruct.USART_WordLength = USART_WordLength_8b;
	USARTInitStruct.USART_Parity = USART_Parity_No;
	USARTInitStruct.USART_StopBits = USART_StopBits_1;
	USARTInitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx ;//| USART_Mode_Rx
	USARTInitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_Init(USART1, &USARTInitStruct);
	
	// 4. 配置中断
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	NVIC_InitTypeDef NVICInitStruct;
	NVICInitStruct.NVIC_IRQChannel = USART1_IRQn;
	NVICInitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	NVICInitStruct.NVIC_IRQChannelSubPriority = 0;
	NVICInitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVICInitStruct);
	
	// 5. 闭合USART1的总开关
	USART_Cmd(USART1, ENABLE);
}

void USART1_IRQHandler(void)
{
	uint8_t c;
	if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{
		c = USART_ReceiveData(USART1);
		
		Queue_Enqueue(&hQueue, c);
	}
	else if(USART_GetITStatus(USART1, USART_IT_TXE) == SET)
	{
		if(Queue_Dequeue(&hTxQueue, &c) == SUCCESS)
		{
			USART_SendData(USART1, c);
		}
		else
		{
			USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
		}
	}
}

static uint8_t a[100];
static uint16_t cursor = 0; //游标

static void USART_Echo_Proc(void)
{
	uint8_t c;
	
	USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
	ErrorStatus error = Queue_Dequeue(&hQueue, &c);
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	if(error == SUCCESS)
	{
		a[cursor++] = c;
		
		if(cursor>2 && a[cursor-2] == '\r'&& a[cursor - 1] == '\n') // 收到新行
		{
			// 发送出去
			a[cursor] = 0;
			USART1_SendString((const char *)a);
			cursor=0;
		}
	}
}

static void USART1_SendString(const char *Str)
{
	uint32_t i;
	USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
	for(i=0;i<strlen(Str);i++)
	{
		Queue_Enqueue(&hTxQueue, Str[i]);
	}
	USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
}

2 queue.c

#include "queue.h"

void Queue_Init(Queue_HandleTypeDef *hQueue)
{
	hQueue->Tail = 0;
}

void Queue_Enqueue(Queue_HandleTypeDef *hQueue, uint8_t Element)
{
	hQueue->Data[hQueue->Tail ++] = Element;
}

ErrorStatus Queue_Dequeue(Queue_HandleTypeDef *hQueue, uint8_t *pElement)
{
	uint32_t i;
	if(hQueue->Tail == 0) return ERROR; // 队列空,操作无效
	*pElement = hQueue->Data[0];
	for(i=0;i<hQueue->Tail-1;i++)
	{
		hQueue->Data[i] = hQueue->Data[i+1];
	}
	hQueue->Tail--;
	return SUCCESS;
}

3 queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_

#include "stm32f10x.h"

typedef struct 
{
	uint8_t Data[100];
	uint16_t Tail; // 队尾
} Queue_HandleTypeDef;

void Queue_Init(Queue_HandleTypeDef *hQueue);
void Queue_Enqueue(Queue_HandleTypeDef *hQueue, uint8_t Element);
ErrorStatus Queue_Dequeue(Queue_HandleTypeDef *hQueue, uint8_t *pElement);

#endif // 防止头文件被重复引用

 

好的,您的问题是如何使用docker和docker-compose部署canal和mysql,并将mysql同步到rabbitmq,创建所需队列,并指定本地Canal配置文件。以下是一些基本的步骤: 1. 安装docker和docker-compose。 2. 创建一个docker-compose.yml文件,其中包含以下内容: ```yaml version: '3' services: mysql: image: mysql:8.0.30 restart: always environment: MYSQL_ROOT_PASSWORD: yourpassword ports: - "3306:3306" volumes: - ./mysql-data:/var/lib/mysql networks: - canal canal: image: canal/canal-server:v1.1.5 restart: always ports: - "11111:11111" volumes: - ./canal/conf:/home/admin/canal-server/conf - ./canal/logs:/home/admin/canal-server/logs networks: - canal rabbitmq: image: rabbitmq:3.8.14-management-alpine restart: always ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: yourusername RABBITMQ_DEFAULT_PASS: yourpassword networks: - canal networks: canal: ``` 3. 在本地创建一个名为canal的文件夹,其中包含一个名为instance.properties的文件,其中包含以下内容: ``` canal.instance.master.address=yourmysqlhost:3306 canal.instance.dbUsername=root canal.instance.dbPassword=yourpassword canal.instance.connectionCharset=UTF-8 canal.instance.filter.regex=.*\\..* ``` 4. 启动docker-compose: ``` docker-compose up -d ``` 5. 进入canal容器,并创建一个名为example的实例: ``` docker exec -it canal bash cd /home/admin/canal-server/bin ./canal.sh example -d ".*\\..*" --rabbitmq.enabled=true --rabbitmq.host=rabbitmq --rabbitmq.port=5672 --rabbitmq.username=yourusername --rabbitmq.password=yourpassword ``` 6. 验证是否成功同步到rabbitmq。您可以使用任何可以订阅rabbitmq队列的客户端来验证。 希望这可以帮助您开始使用docker和docker-compose部署canal和mysql,并将mysql同步到rabbitmq,创建所需队列,并指定本地Canal配置文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值