- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
嵌入式工程师笔试题及答案
一、C语言基础与嵌入式应用(每题10分,共30分)
写出volatile关键字在嵌入式开发中的2个典型用途,并说明原因
答案:
用途1:修饰MCU寄存器地址变量(如volatileuint32_t*UART_TX=0)
原因:寄存器值可能被硬件自动修改(如UART发送完成后TX寄存器清空),volatile强制编译器每次从内存读取值,避免优化后使用缓存值导致逻辑错误。
用途2:修饰多任务/中断共享变量(如volatileuint8_tflag=0;)
原因:中断或其他任务可能修改该变量,volatile防止编译器将变量优化到寄存器中,确保主任务能读取到必威体育精装版值。
嵌入式系统中为何不建议频繁使用malloc/free?列举2种替代内存管理方案
答案:
不建议原因:①内存碎片:频繁分配/释放小块内存会导致内存空间碎片化,后续无法分配大块连续内存;②执行时间不确定:malloc/free执行时间不固定,实时系统中可能导致任务超时。
替代方案:①静态内存池:初始化时分配固定大小的内存块数组,分配时从数组中取空闲块,释放时标记为空闲(如structMemBlockpool[10];);②栈内存:对于临时变量,使用函数栈(如uint8_tbuf[64];),函数结束后自动释放,无碎片问题。
编写函数实现“通过GPIO翻转控制LED闪烁”,要求:①支持任意GPIO口配置;②闪烁周期100ms(高低电平各50ms)
答案:
#includestm32f10x.h//以STM32为例,需适配实际MCU头文件
//GPIO配置:port=GPIOA/GPIOB等,pin=0~15,speed=GPIO_Speed_50MHz
voidGPIO_LED_Init(GPIO_TypeDef*port,uint16_tpin,GPIOSpeed_TypeDefspeed){
GPIO_InitTypeDefGPIO_InitStruct;
//使能GPIO时钟(需根据port适配,如GPIOA对应RCC_APB2Periph_GPIOA)
if(port==GPIOA)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
elseif(port==GPIOB)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStruct.GPIO_Pin=pin;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出(驱动LED)
GPIO_InitStruct.GPIO_Speed=speed;
GPIO_Init(port,GPIO_InitStruct);
}
//延时函数(简单软件延时,实际建议用定时器中断)
voidDelay_ms(uint32_tms){
uint32_ti,j;
for(i=ms;i0;i--)
for(j=11000;j0;j--);//适配1MHz系统时钟,需实际校准
}
//LED闪烁:port=GPIO口,pin=引脚号
voidLED_Blink(GPIO_TypeDef*port,uint16_tpin){
while(1){
GPIO_SetBits(port,pin);//高电平(LED亮,需根据电路调整)
Delay_ms(50);
GPIO_ResetBits(port,pin);//低电平(LED灭)
Delay_ms(50);
}
}
二、MCU外设与硬件接口(每题10分,共30分)
UART通信中,若MCU主频72MHz,UART波特率115200bps,oversampling=16,计算UART分频系数(写出计算过程)
答案:
公式:分频系数=外设时钟频率/(波特率×oversampling)
计算:假设UART挂载在APB1总线(时钟36MHz,STM32F1系列),则:
分频系数=/(115200×16)=/1843200≈19.53125
实际配置:整数部分19,小数部分0
文档评论(0)