clr_gd、clbss_l undefined reference(2018-07-01)

本文介绍了解决 U-Boot 编译过程中遇到的未定义引用错误的方法,主要针对缺少宏定义导致的问题,并提供了具体的解决步骤。
部署运行你感兴趣的模型镜像

机器感知

一个专注于SLAM、机器视觉、Linux 等相关技术文章分享的公众号
 

出错信息:

arch/arm/lib/built-in.o: In function `clr_gd':

/root/u-boot-2015.10/arch/arm/lib/crt0.S:110: undefined reference to `board_init_f'

arch/arm/lib/built-in.o: In function `clbss_l':

/root/u-boot-2015.10/arch/arm/lib/crt0.S:179: undefined reference to `coloured_LED_init'

/root/u-boot-2015.10/arch/arm/lib/crt0.S:180: undefined reference to `red_led_on'

/root/u-boot-2015.10/arch/arm/lib/crt0.S:186: undefined reference to `board_init_r'

出错原因:缺少宏定义

#define CONFIG_SYS_GENERIC_BOARD

解决办法:在<board>.h中添加如下定义即可

#define CONFIG_SYS_GENERIC_BOARD

 

您可能感兴趣的与本文相关的镜像

EmotiVoice

EmotiVoice

AI应用

EmotiVoice是由网易有道AI算法团队开源的一块国产TTS语音合成引擎,支持中英文双语,包含2000多种不同的音色,以及特色的情感合成功能,支持合成包含快乐、兴奋、悲伤、愤怒等广泛情感的语音。

<think>我们正在处理一个嵌入式系统控制问题,涉及两个信号:CLR_595和off_PWM。根据常见的嵌入式编程实践,这些信号可能是通过微控制器的GPIO(通用输入输出)引脚控制的。CLR_595通常与移位寄存器(如74HC595)的清除(清除寄存器)引脚相关,而off_PWM可能是一个用于关闭PWM(脉宽调制)输出的控制信号。控制这些信号的一般步骤:1.初始化:配置相关引脚为输出模式。2.控制逻辑:根据需求设置引脚的电平(高或低)。由于没有具体硬件和平台信息,以下以通用的嵌入式C语言为例,假设使用某个微控制器(如STM32、AVR等)。步骤:1.定义引脚:确定CLR_595和off_PWM连接的GPIO引脚。2.初始化GPIO:将这两个引脚设置为输出。3.控制信号:-设置CLR_595为高电平通常使移位寄存器正常工作,低电平时清除寄存器内容(具体看芯片手册,有的可能是低电平有效,有的高电平有效)。-设置off_PWM为高电平可能关闭PWM输出,低电平使能(具体逻辑取决于硬件设计)。注意:信号的有效电平(高电平有效或低电平有效)取决于硬件电路设计,因此需要参考具体电路图或设备手册。示例代码(伪代码,基于STM32HAL库):```c//假设CLR_595连接在GPIOA的PIN0,off_PWM连接在GPIOA的PIN1#defineCLR_595_PINGPIO_PIN_0#define CLR_595_PORTGPIOA#defineOFF_PWM_PIN GPIO_PIN_1#defineOFF_PWM_PORTGPIOA//初始化函数voidGPIO_Init(void){//使能GPIOA时钟(根据具体微控制器调整)__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct ={0};//配置CLR_595引脚GPIO_InitStruct.Pin= CLR_595_PIN;GPIO_InitStruct.Mode =GPIO_MODE_OUTPUT_PP;//推挽输出GPIO_InitStruct.Pull =GPIO_NOPULL;GPIO_InitStruct.Speed= GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(CLR_595_PORT, &GPIO_InitStruct);//配置off_PWM引脚GPIO_InitStruct.Pin= OFF_PWM_PIN;HAL_GPIO_Init(OFF_PWM_PORT,&GPIO_InitStruct); }//设置CLR_595信号void set_CLR_595(bool state) {//state为true时设置高电平,false设置低电平HAL_GPIO_WritePin(CLR_595_PORT,CLR_595_PIN, state? GPIO_PIN_SET :GPIO_PIN_RESET);} //设置off_PWM信号voidset_off_PWM(boolstate){HAL_GPIO_WritePin(OFF_PWM_PORT,OFF_PWM_PIN,state ?GPIO_PIN_SET: GPIO_PIN_RESET); }```注意事项: -以上代码基于STM32的HAL库,如果使用其他平台(如AVR、ESP32等),语法会有所不同。 -务必根据实际硬件连接修改引脚定义。 -信号的有效电平需要根据硬件设计确定。例如,如果CLR_595是低电平有效,则在需要清除移位寄存器时,应设置低电平,然后恢复高电平(通常需要一个脉冲)。同样,off_PWM信号的控制逻辑也可能相反。如果需要产生脉冲(例如清除移位寄存器需要低脉冲): ```cvoidclear_shift_register(void) {set_CLR_595(0);//拉低//短暂延时(根据移位寄存器的手册确定延时时间)delay_us(1);//假设需要至少500ns,则延时1微秒足够set_CLR_595(1);//恢复高电平} ```对于off_PWM,如果它是用来使能或禁用PWM的,通常我们会在初始化时将其设置为禁用状态(例如高电平),然后在需要时再使能(低电平)。同样,具体逻辑取决于硬件设计。由于没有具体硬件信息,以上提供的是通用方法。在实际应用中,请参考硬件手册和电路图。相关问题:1.如何确定CLR_595和off_PWM信号的有效电平(高电平有效还是低电平有效)?2.在嵌入式系统中,如何实现精确的延时(例如上述清除移位寄存器的脉冲宽度)?3.如果使用不同的微控制器(如AVR、PIC、ESP32等),控制GPIO的方法有何不同?4.如何通过示波器验证CLR_595和off_PWM信号是否正确产生?</think>### 嵌入式系统中控制 CLR_595 和 off_PWM 信号的方法 在嵌入式系统中控制 `CLR_595`(移位寄存器清除信号)和 `off_PWM`(PWM 关闭信号)需要硬件接口编程和时序控制。以下是具体实现步骤: #### 一、硬件连接与信号定义 1. **CLR_595** - 通常连接 74HC595 移位寄存器的 MR(Master Reset)引脚(第 10 脚) - **有效电平**:低电平有效(拉低时清除寄存器内容)[^1] - 示例电路: $$ \text{MCU\_GPIO} \rightarrow 1\text{k}\Omega \text{电阻} \rightarrow \text{74HC595\_MR} $$ 2. **off_PWM** - 用于强制关闭 PWM 输出(如电机驱动芯片的使能端) - **有效电平**:高电平有效(拉高时关闭 PWM) - 示例电路: $$ \text{MCU\_GPIO} \rightarrow \text{光耦隔离} \rightarrow \text{PWM\_芯片\_ENABLE} $$ #### 二、软件实现(基于 C 语言) ```c // 定义 GPIO 引脚(以 STM32 HAL 库为例) #define CLR_595_PIN GPIO_PIN_4 #define CLR_595_PORT GPIOA #define OFF_PWM_PIN GPIO_PIN_5 #define OFF_PWM_PORT GPIOB // 初始化函数 void GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 配置 CLR_595 为输出模式 GPIO_InitStruct.Pin = CLR_595_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(CLR_595_PORT, &GPIO_InitStruct); // 配置 off_PWM 为输出模式 GPIO_InitStruct.Pin = OFF_PWM_PIN; HAL_GPIO_Init(OFF_PWM_PORT, &GPIO_InitStruct); // 初始状态:CLR_595 无效(高电平),off_PWM 无效(低电平) HAL_GPIO_WritePin(CLR_595_PORT, CLR_595_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(OFF_PWM_PORT, OFF_PWM_PIN, GPIO_PIN_RESET); } // 清除移位寄存器(低脉冲至少 20ns) void Clear_ShiftRegister(void) { HAL_GPIO_WritePin(CLR_595_PORT, CLR_595_PIN, GPIO_PIN_RESET); // 拉低 HAL_Delay(1); // 保持 1ms(远大于最小要求) HAL_GPIO_WritePin(CLR_595_PORT, CLR_595_PIN, GPIO_PIN_SET); // 恢复高电平 } // 关闭 PWM 输出 void Disable_PWM(void) { HAL_GPIO_WritePin(OFF_PWM_PORT, OFF_PWM_PIN, GPIO_PIN_SET); // 拉高关闭 } ``` #### 三、关键注意事项 1. **时序要求** - `CLR_595` 低脉冲宽度需满足芯片手册要求(74HC595 典型值 ≥20ns) - 使用 `HAL_Delay()` 时注意时钟精度,高速场景改用定时器 2. **硬件保护** - `off_PWM` 控制高压设备时,建议添加光耦隔离(如 TLP521) - PCB 布局避免长走线,防止信号干扰 3. **同步操作** 若需同时控制两个信号: ```c // 原子操作示例(关闭 PWM 并清除寄存器) void System_Reset(void) { HAL_GPIO_WritePin(OFF_PWM_PORT, OFF_PWM_PIN, GPIO_PIN_SET); HAL_GPIO_WritePin(CLR_595_PORT, CLR_595_PIN, GPIO_PIN_RESET); HAL_Delay(1); HAL_GPIO_WritePin(CLR_595_PORT, CLR_595_PIN, GPIO_PIN_SET); } ``` #### 四、调试建议 1. 用示波器测量 `CLR_595` 脉冲宽度和上升时间 2. 通过逻辑分析仪验证信号时序关系 3. 添加软件看门狗防止信号锁死 > 实际实现需根据具体微控制器型号(如 STM32、ESP32、AVR)调整寄存器操作,并参考硬件手册确认电压电平兼容性[^2]。 --- ### 相关问题 1. 如何优化 `CLR_595` 信号的响应速度? 2. 当 `off_PWM` 控制大功率负载时,需要哪些保护电路? 3. 如何通过中断同步控制多个硬件信号? 4. 移位寄存器清除操作对 SPI/I²C 通信有何影响? [^1]: 74HC595 数据手册要求 MR 引脚低电平脉冲最小宽度为 20ns(典型值) [^^2^^]: 嵌入式系统硬件接口设计规范 IEEE 1149.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值