Blog's Home

越努力,越幸运!

面试总结(2018年)

一、C语言相关

1、strcpy()函数、malloc()函数用法;

strcpy()函数原型:

char *strcpy(char *dst, const char *src);

strcpy()只用于字符串复制,而且它不仅复制字符串内容,还会复制字符串的结束符。它的返回值为dst。为什么需要返回dst呢?目的是为了实现链式操作,所以将目的地址返回。比如下述代码:

数据结构——查找

在过去的10多年间,查找,或者说是搜索这一项技术,造就了不少明星企业,诸如前期的yahoo、后来居上的google,以及中国本土企业百度,都在搜索这一领域获取了巨大的市场利益。本文简单的论述一些关于查找的基础数据结构。

查找中很重要的一个概念就是:关键字。查找的定义为:根据某个给定的值,在查找表(也就是数据库)中确定一个其关键字等于给定值的记录的过程。

1、顺序查找(Sequential Search)

顺序查找是最基本的查找技术,它的实现原理也最简单:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值的比较,若某一次比较结果相等,则查找成功;若查找到最后一个(或第一个)记录,仍不相等,则查找不成功。下面为一段顺序表查找的算法:

固件——嵌入式产品的灵魂

备用题目:如何让一块砖头售价过万——浅谈嵌入式固件开发

欲壑难填or生活本质?——评《东京女子图鉴》

    先解释下名词的含义,图鉴:是指以全面、系统、准确地用图文形式记述上年度事物运动、发展状况为主要内容的资料性工具书。这部电视剧的名字中包含图鉴两个字,我想编剧的意思应该是想表达这部电视剧对东京女子的生活和人生轨迹写照的很全面和系统吧,所以用了这么一个看起来蛮装逼的词语。

按键之单击、双击、短按、长按

最近在写按键单击双击检测的代码,折腾了大半天,搞得很恼火,好不容易才把逻辑拎清,故而撰文以记。

本文所用的按键是一个非常简单的独立按键,以往在学校用的从来都是一排按键,或者是矩阵键盘,按键个数很多,从来不担心够不够用,往往一个按键就只有一种操作,所以从来都没有去考虑、也没有写过检测双击、长按、超长按的代码,而现在到了企业,节约成本就是创造利润,一台售价几千上万的仪器,却非常吝啬的只给出一个按键,而要求实现的功能并不见得少,于是乎,就只能靠软件来补硬件的缺失。从这里也可以看出来,学校里面所教的东西和实际生产所用不同,或者叫脱节,就是学校从来不告诉你企业里面需要什么,更别说教你怎么做了。这就是教育的不足。

两轮平衡车设计总结

1、直立控制中为什么需要测量角度和角速度?

答:小车平衡需要引入两个力,一个是回复力,一个是阻尼力,回复力与角度成正比,阻尼力与角速度成正比,所以需要测量这两个量。

一日记录

1、关于SisTick时钟

问题:我用定时器0开了一个5ms的中断,然后在中断里面做控制处理,却发现程序一直停在里面死循环,将相关代码逐条注释,后来发现是delay_us()延时函数的原因,而这个延时函数的实现是通过SisTick的中断来实现的,通过在中断里设一个变量,来决定什么时候停止延时,但程序就是在这里死循环了,原因就在于:SisTick的中断在初始化设置时已经设置为最低优先级,而我却一直潜意识的认为SisTick的中断是最高优先级,所以错了,因为SisTick的中断优先级过低,导致无法在定时器0中断里面进入SisTick中断,所以函数一直死循环了。

操作符优先级问题

我们先来看一条代码:

// 如果P2.10FEI位为1,表明中断由P2.10口下降沿产生
if( LPC_GPIOINT->IO2IntStatF & 0x00000400 != 0 )
{
  GPIO_ToggleBits(LPC_GPIO2, GPIO_Pin_0);          // LED取反,表明进入了该中断
}

代码的意思很明了,即如果“!=”操作符左边的表达式的值不等于0的话,则此判断语句为真,紧跟着执行之后的代码块,但事实并非如此,因为在“LPC_GPIOINT->IO2IntStatF”的值为0x00000400的情况下,花括号内的代码仍然没有执行,这表明此时if()内的表达式为假,而按照我们之前的想法,如果“LPC_GPIOINT->IO2IntStatF”的值为0x00000400,则有:0x00000400 & 0x00000400 = 0x00000400,这个值不等于0,if()内表达式应该为真,而事实却刚好相反,那么问题出在哪里呢?

一些小看法

1、实验室的LPC1768系统板上只有一个电源电压,3.3V,我认为这是很不合理的,在一块系统板上,或者一个工作平台上,是不应该只有一个电源电压的,尤其是这种通用型的系统开发板。我认为只有在那种已经确定的,并且功能完全固定的产品上,如果只需要一个电源电压那就只给出一个就行了,多了就是浪费,但是在通用型的开发平台上,有时,只有一个电源电压,会给应用带来很大的不方便,从而不得不再次外接调压模块,这样既浪费钱,又浪费时间。

int类型在不同平台上的大小

8位51单片机:int类型为2字节,即16位,其取值范围为:-32768~32767。

32位ARM处理器:int类型为4字节,即32位,其取值范围远远大于51单片机上的int类型。若要兼容8051的int类型,则在ARM平台上应使用short int类型,而不是原来的int类型。

由于这个原因,故而在将程序从8位机移植到32位机的时候,要非常注意数据类型的选择,不能照搬,否则结果会不一样。当然,为了尽量方便移植,则代码编写一定要规范!要考虑到跨平台移植的可能。

«234567891011»
欢迎来到黄建雄的博客,本站点不定期进行博文更新,敬请期待!
  [查看权限]

站内搜索
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 2.2 Prism Build 140101

Copyright © 2015 by 黄建雄. 本站文章除特别声明系转载外,均保留所有权利.
知识共享许可协议本作品采用知识共享署名 2.5 中国大陆许可协议进行许可,欢迎转载,但请注明来自Blog's home,并保持转载后文章内容的完整。        
湘ICP备15003615号 工业和信息化部

  • 您的鼓励是对我最大的认可