避免Kafka客户端无法连接Docker上运行的Kafka,又名:Docker如何添加hosts映射

承接上文

在上一篇文章中,我们谈了下Kafka客户端连接后端Broker的认证,导致的无法建立连接的出现原因,了解了为什么无法通过认证,即:客户端未携带与 Zookeeper 中存储的 Broker 连接认证信息

有朋友可能会问了,我知道了这个原理了,知道需要为客户端主机添加 hosts 映射,可是如果这个客户端运行在容器里呢?该怎么处理?

解决方式

解决思路有两种,第一种是容器使用主机网络,修改主机/etc/hosts ;第二种是通过命令为容器添加 hosts 映射

docker 命令行如何做

  • 主机网络模式:在镜像名称前添加 --network host

举例:docker run -it --network host nginx cat /etc/hosts

  • 添加容器内 hosts 映射:与上述位置相同,添加 --add-host 映射域名:映射ip,相当于在容器内设置了映射ip 映射域名

举例:docker run -it --add-host hellxz.test:192.168.1.10 nginx cat /etc/hosts

docker-compose 如何做

  • 主机网络模式:在docker-compose.yml中添加 network_mode: "host"

举例:

version: "3.3"
services:
    zookeeper:
        image: zookeeper:3.5.5
        restart: always
        container_name: zookeeper
        environment:
            - ZOO_MY_ID=1
        network_mode: "host" #host模式会导致ports与expose端口映射失效
  • 添加容器内 hosts 映射:在docker-compose.yml中添加 extra_hosts

举例:

version: "3.3"
services:
    zookeeper:
        image: zookeeper:3.5.5
        restart: always
        container_name: zookeeper
        ports:
            - "2181:2181"
        expose:
            - "2181"
        environment:
            - ZOO_MY_ID=1
        extra_hosts:
            - "hellxz.test:192.168.1.10"

引用:https://docs.docker.com/network/network-tutorial-host/https://docs.docker.com/compose/compose-file/

本文采用 CC BY 4.0 协议进行授权,转载请标注作者署名及来源。https://www.cnblogs.com/hellxz/p/how_to_add_hosts_on_docker.html

<think>好的,我现在需要帮助用户找到关于STM32 HAL库定时器中断配置的教程和示例代码。用户提到了引用[1]、[2]、[3],所以我得先看看这些引用内容。 首先,引用[1]详细说明了定时器中断的配置步骤,包括开启时钟、初始化参数、使能中断等,还提到了CubeMX配置和中断服务函数。这部分应该是最相关的,特别是步骤和注意事项。然后引用[2]是关于输入捕获的,虽然主要不是中断配置,但可能示例代码结构有参考价值。引用[3]提到外部中断的HAL库配置,虽然主题不同,但中断优先级和使能的部分可能有共通之处。 接下来,用户需要教程和示例代码。我应该按照引用[1]中的步骤来组织回答,分步骤说明配置流程,并结合CubeMX的配置,因为用户提到的引用里都有CubeMX的内容。同时,需要确保代码部分使用正确的HAL库函数,比如HAL_TIM_Base_Init、HAL_TIM_Base_Start_IT等。 可能的问题是如何处理中断服务函数和回调函数。根据引用[1],HAL库的中断处理需要重写回调函数,所以要在代码里覆盖HAL_TIM_PeriodElapsedCallback。这点很重要,必须明确指出。 另外,用户可能需要知道如何计算定时器周期,引用[1]里提到了定时器计算公式,应该给出公式并举例说明,比如72MHz时钟,分频和重装值如何设置才能得到1秒中断。 示例代码部分要确保语法正确,使用正确的函数和结构体,比如TIM_HandleTypeDef,配置Prescaler和Period,然后启动中断。同时,要提醒用户将定时器中断服务函数添加到stm32fxx_it.c中,但HAL库已经处理了这部分,只需要重写回调函数即可。 最后,用户可能遇到的常见问题,比如中断不触发,需要检查时钟配置、中断使能、优先级设置,以及是否正确重写回调函数。这些在引用[1]的注意事项里提到过,需要包含在回答中。 现在需要检查所有步骤是否符合HAL库的标准流程,并确保没有遗漏关键点,比如CubeMX配置、中断优先级设置、回调函数的使用。同时,引用相关的引用来源,比如步骤部分引用[1],CubeMX配置引用[1]和[2],中断服务部分引用[1]和[3]。 最后生成相关问题,考虑用户可能进一步想知道如何计算定时器参数、优化中断处理、或者与其他中断的冲突解决,这些都可以作为相关问题提出。</think>### STM32 HAL库定时器中断配置教程 #### 一、定时器中断配置流程 1. **开启定时器时钟** 在`main.c`的初始化代码中,通过`__HAL_RCC_TIMx_CLK_ENABLE()`使能对应定时器时钟,例如: ```c __HAL_RCC_TIM3_CLK_ENABLE(); // 使能TIM3时钟 ``` [^1] 2. **CubeMX配置定时器参数** - 选择定时器模式为"Internal Clock"(内部时钟) - 配置预分频系数(Prescaler)和自动重装载值(Counter Period) - 计算公式: $$T_{中断周期} = \frac{(Prescaler + 1) \times (CounterPeriod + 1)}{TIM_{时钟频率}}$$ 例如:72MHz时钟,Prescaler=7199,CounterPeriod=9999,则中断周期为1秒[^1]。 3. **初始化定时器中断配置** ```c TIM_HandleTypeDef htim3; htim3.Instance = TIM3; htim3.Init.Prescaler = 7199; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 9999; HAL_TIM_Base_Init(&htim3); HAL_TIM_Base_Start_IT(&htim3); // 启动定时器中断 ``` [^1][^2] 4. **设置中断优先级(NVIC)** 在CubeMX中配置NVIC,设置抢占优先级和子优先级: ```c HAL_NVIC_SetPriority(TIM3_IRQn, 1, 0); HAL_NVIC_EnableIRQ(TIM3_IRQn); ``` [^3] 5. **编写中断回调函数** 重写`HAL_TIM_PeriodElapsedCallback`函数实现中断逻辑: ```c void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM3) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 翻转LED状态 } } ``` --- #### 二、示例代码 ```c // main.c 初始化部分 TIM_HandleTypeDef htim3; void MX_TIM3_Init(void) { htim3.Instance = TIM3; htim3.Init.Prescaler = 7199; htim3.Init.CounterMode = TIM_COUNTERMODE_UP; htim3.Init.Period = 9999; HAL_TIM_Base_Init(&htim3); HAL_TIM_Base_Start_IT(&htim3); } // stm32f4xx_it.c 中添加中断服务函数 void TIM3_IRQHandler(void) { HAL_TIM_IRQHandler(&htim3); // HAL库统一处理中断 } ``` --- #### 三、常见问题排查 1. **中断未触发** - 检查定时器时钟是否使能 - 确认`HAL_TIM_Base_Start_IT()`已调用 - 验证NVIC优先级配置是否冲突[^3] 2. **回调函数未执行** - 确保回调函数在用户代码文件中重写(非库文件) - 检查定时器实例标识(如`htim->Instance == TIM3`) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北小狐狸-Hellxz

请作者喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值