首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
leon201903091654136
获赞
90
粉丝
72
关注
3
看过 TA
65
南京理工大学
2013
嵌入式工程师
IP属地:上海
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑leon201903091654136吗?
发布(253)
评论
刷题
收藏
leon201903091654136
关注TA,不错过内容更新
关注
2021-01-10 00:00
已编辑
南京理工大学 嵌入式工程师
谈谈看门狗在嵌入式中的用法
一、看门狗原理 在产品化的嵌入式系统中,为了使系统在异常情况下能自动复位,一般都需要引入看门狗。 看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗启动后,计数器开始自动计数,经过一定时间,如果没有被复位,计数器溢出就会对CPU产生一个复位信号使系统重启(俗称“被狗咬”)。系统正常运行时,需要在看门狗允许的时间间隔内对看门狗计数器清零(俗称“喂狗”),不让复位信号产生。如果系统不出问题,程序保证按时“喂狗”,一旦程序跑飞,没有“喂狗”,系统“被咬”复位。 这就好比你的身边有一只时刻饥饿的狗,你不按时给它肉吃,它就会吃你的肉,你被吃了......挂了,投胎转世,彻底重新做人了。不幸的是...
0
点赞
评论
收藏
分享
2021-01-09 23:59
南京理工大学 嵌入式工程师
嵌入式开发一般流程
本文系转载,https://blog.csdn.net/a445849497/article/details/70309508 好久没有更新了,最近看到一篇文章,可以用来作为产品开发的参考流程。 嵌入式产品,与普通电子产品一样,开发过程都需要遵循一些基本的流程,都是一个从需求分析到总体设计,详细设计到最后产品完成的过程。 但是,与普通电子产品相比,嵌入式产品的开发流程又有其特殊之处。它包含嵌入式软件和嵌入式硬件两大部分,针对嵌入式硬件和软件的开发,在普通的电子产品开发过程中,不需要涉及。 嵌入式产品的研发流程具体如下图: 通用九步开发法 下面,针对嵌入式产品的开发过程中的各...
0
点赞
评论
收藏
分享
2021-01-09 23:59
南京理工大学 嵌入式工程师
各种alloc傻傻分不清楚
很多新学C语言的童鞋在用到动态内存分配与使用的时候,对如何选择各种分配函数及其底层区别搞不清楚,那么下文就认真的讲讲它们的种种。 (1)C语言的内存分配方式 <1>从静态存储区域分配. 这种方式主要是系统用于自动分配给全局变量、static变量内存资源的. 它们在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在. <2>在栈上分配 这种方式主要是用于系统自动分配给函数内部的局部变量的,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内...
0
点赞
评论
收藏
分享
2021-01-09 23:59
已编辑
南京理工大学 嵌入式工程师
解剖getchar和putchar
一、首先来看一个例子: #include <stdio.h> int main( ) { int c; c = getchar(); while (c != EOF) { putchar(); c= getchar(); } return 0; } 这里主要解释下为什么要用int型来接受getchar函数。 很多时候,我们会写这样的两行代码: char c; c = getchar(); 这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D即文件结束符EOF时,getchar ()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这...
0
点赞
评论
收藏
分享
2021-01-09 23:58
已编辑
南京理工大学 嵌入式工程师
open函数及其与openat函数的区别
一、原型 #include <fcntl.h> int open(const char *path, int oflag, mode_t mode); int openat(int fd, const char *path, int oflag, mode_t mode ); //函数执行成功返回文件描述符,失败返回-1. 二、相同点 当传给函数的路径名是绝对路径时,二者无区别.(openat()自动忽略第一个参数fd) 三、不同点 当传给函数的是相对路径时,如果openat()函数的第一个参数fd是常量AT_FDCWD时,则其后的第二个参数路径名是以当前工作目录为基址的;否则以f...
0
点赞
评论
收藏
分享
2021-01-09 23:58
已编辑
南京理工大学 嵌入式工程师
unix系统中实现读写的原子操作
众所周知在早期版本的Unix系统中,读函数read() 和写函数write()中并没有O_APPEND这一选项。所以为了在文件的末尾添加内容的话一般是分两步走: lseek(fd,0L,2) /*将文件位置指针定位到文件末尾*/ write(fd,buf,size) /*将buf中的size个字节写入文件*/ 但这里有一个问题就是,如果系统是支持多进程的话,就会有可能发生错误。 因为如果两个进程均使用该方法向同一个文件末尾添加内容,当第一个进程执行完第一步之后,此时来了一个中断或其它原因导致系统暂停进程1的执行,而切换到进程2,并依照上述2步走的方案向文件添加了内...
0
点赞
评论
收藏
分享
2021-01-09 23:58
已编辑
南京理工大学 嵌入式工程师
精准搜索
度娘、谷哥这些常用搜索引擎我们经常使用,但是我们大多数人的方法可能就是把要搜索的内容直接复制到搜索框的这种最没技术含量的“鸟枪法”,往往搜索出来的结果不是你想要的。我们如何更加快速地获取我们想要的信息呢?这里就以谷哥为例介绍几种搜索技巧。 按文件类型搜索-filetype 我们常常需要在网络上找文件,但是搜索出来的却可能是一堆不相关的东西。怎么办?使用filetype。例如想要搜索《c primer plus》的pdf版本,只需要搜索输入: c primer plus中文版 filetype:pdf 当然,你也可以搜索其他类型,例如doc,mobi等。 过滤关键字用减号 如果我们在搜索结果...
0
点赞
评论
收藏
分享
2021-01-09 23:57
南京理工大学 嵌入式工程师
应用进程写数据到TCP/UDP套接口的过程及步骤解析
应用进程写数据到TCP套接口 每一个TCP套接口都有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这一缓冲区的大小。当应用进程调用系统函数write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设置。内核将不从write系统调用返回,直到应用进程缓冲区中的所有数据都 拷贝到套接口发送缓冲区。 所以从写一个TCP套接口的write调用成功返回仅仅表示我们可以重新使用应用进程的缓冲...
0
点赞
评论
收藏
分享
2021-01-09 23:57
已编辑
南京理工大学 嵌入式工程师
LINUX存储相关知识串烧
linux 内存是所有从事相关技术人员,需要深入了解的计算机资源管理方法论,合理的使用内存,有助于提升机器的性能和稳定性。本文主要从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。主要介绍了 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。 一 走进 linux 内存 1、内存是什么? 内存又称主存,是 CPU 能直接寻址的存储空间,由半导体器件制成,主要是DRAM构成。 内存的最核心特点是可随机存取,存取速率快。 计算机系统存储体系结构图 2、内存的作用...
0
点赞
评论
收藏
分享
2021-01-09 23:56
南京理工大学 嵌入式工程师
测测你的C语言功底怎么样
很多时候当你完成了C语言语法的学习,特别适合一些扩展用法之后,自身会陷入一个自满的大坑,以为自己啥都会了,但其实自己水平到底怎样,你自己也不知道。那么今天我就带着大家测一测你的嵌入式C学的到底有多牛(low)。 自测题:请定义一个宏,求两个数中的最大数。 不合格水平 对于学过C语言的同学,写出这个宏基本上不是什么难事,使用条件运算符就能完成: #define MAX(x,y) x > y ? x : y 这是最基本的C语言语法,如果连这个也写不出来,估计你还没进C的大门。但一般这种水平,公司是不会要你的,因为你还是门外汉! 不信?举个反例,验证一下我们定义的宏是否正确: #defin...
0
点赞
评论
收藏
分享
2021-01-09 23:56
已编辑
南京理工大学 嵌入式工程师
在shell中的7种数值计算方法
引言 Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算; Linux shell 中使用 expr 与 bc 两个程序实现高级运算; 闲话不多叙,直接上好货! let法 let命令是BASH中用于计算的工具,用于执行一个或多个表达式,变量计算中不需要加上$来表示变量。如果表达式中包含了空格或其他特殊字符,则必须引起来。 [root@host]# i=1 [root@host]# let i=i+2 [root@host]# echo $i 3 [root@host]# let i-- [root@host]# echo $...
0
点赞
评论
收藏
分享
2021-01-09 23:55
南京理工大学 嵌入式工程师
Shell中的测试命令
Shell中有多种针对文件、字符串、数值的条件测试命令,用于检查某个条件是否成立。下面分别进行讲解。 三种测试的命令的表达方式 test,语法格式为:test <condition> [ ],语法格式为:[ <condition> ] [[ ]],语法格式为:[[ <condition> ]] 前两种的条件格式一样,可以通用,仅仅是写法的不同。但双中括号形式是前两者的扩展,可以在测试语句中使用与 &&、或 ||来同时对几种条件进行测试,而在单中括号或test中则需要利用-a和-o来表示与和或,且与或非的优先级依次递减。 三种测试用途...
0
点赞
评论
收藏
分享
2021-01-09 23:55
已编辑
南京理工大学 嵌入式工程师
PCI设备驱动(一)
首先要明确两个概念:Linux内核 PCI设备驱动和设备本身驱动两部分。工作中所谓的编写设备驱动,其实就是编写设备本身驱动。因为Linux 内核的PCI驱动是内核自带的。 当然,并不是说内核帮咱们写好了Linux PCI驱动我们什么就不用做了,至少你要明白内核大致都干了些什么,这样你才能明白你该干什么,如何完成设备本身的驱动。我们下面就来研究下Linux PCI驱动到底都干了些什么。 Linux PCI 初始化代码逻辑上分为三个部分: (1)内核的PCI设备驱动程序 这个伪设备驱动程序从总线0开始查询PCI系统并且定位系统中所有的PCI设备和PCI桥。它建立一个可以用来描述这个PCI系统拓朴层...
0
点赞
评论
收藏
分享
2021-01-09 23:55
已编辑
南京理工大学 嵌入式工程师
和Leon一起从头学Git(一)
一、Git 的安装与配置 Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。 Git 各平台安装包下载地址为:http://git-scm.com/downloads 1、Linux 平台上安装 Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。不同的Linux发行版使用的包管理工具不一,下面列出常用的yum 和apt-get包管理工具下Git安装命令: Debian/Ubuntu Git 安装命令为: $ apt-get install libcurl4-gnutls-...
0
点赞
评论
收藏
分享
2021-01-09 23:54
已编辑
南京理工大学 嵌入式工程师
和Leon一起从头学Git(二)
一、使用Git的一般情景 从远程库repo克隆Git项目资源作为工作目录。 在克隆的资源上添加或修改文件。 如果其他人修改了,你可以更新资源。 在提交前查看修改。 提交修改。 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。 图片发自简书App 二、创建Git仓库 1、使用已有目录作为Git仓库 使用方法 使用当前目录作为Git仓库,我们只需使它初始化。 git init <direction>不指定目录时,默认在命令执行的当前目录创建仓库。 在当前目录生成一个.git目录 git init 在指定目录作为Git仓库 git init ...
0
点赞
评论
收藏
分享
1
2
3
4
5
6
17
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务