「深度学习福利」大神带你进阶工程师,立即查看>>>
单片机概述
什么是单片机(What is Microcontrollers?)
单片机就是一块集成在硅片上的微处理器、存储器以及各种输入输出接口的芯片,这样一块芯片就具备了计算机的属性,因而被称为单片微计算机。其事就是一块集成芯片,但是这块集成芯片具备特殊的功能,这些功能我们可以靠我们自己编程自定义,编程的目的就是使它的各个引脚在不同的时间可以输出不同的电平,进而控制连接到这个单片机各个脚的外围电路的电气状态。
百度百科:
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。
单片机的标号信息及其封装类型
标号信息,以51内核单片机产品列表为例:
公司 | 产品 |
---|
AT(atmel) | AT89C51、AT89C52、AT89C53、AT89C55、AT89LV52、AT89S51、、AT89S52、AT89S53等 |
Phlilips(飞利浦) | P80C54、P80C58、P87C54等 |
Winbond(华邦) | W78C54、W87C58、W87E54、W78E58等 |
Inter(英特尔) | i8C54、i8C58、i8L54、i8L58等 Siemens(西门子) | STC C502-1R、C502-1E等 | STC89C51RC、STC89C52RC等 |
标示举例解释:
STC:前缀,表示芯片为STC公司生产的产品。其它的前缀如AT、i、Winbond、Inter等
8:表示芯片为8051内核
9:表示内部含有Flash E²PROM 存储器。还有80C51中的0表示含有Mask ROM(掩模ROM)存储器,87C51中的7表示含有EPROM存储器(紫外线可擦除ROM)。
C:表示该器件含有CMOS产品。89LV52中的LV和89LE52中的LE都表示该芯片为低电压产品(3.3V电压供电),89S52中的S表示该芯片含有串行下载功能Flash存储器,既具备ISP可在线编程功能。
5:无意义。
8:表示该芯片内部程序存储空间的大小,在51系列中为多少个4KB,8代表32KB。
RR+:DR+表示内部RAM为1280B,RC表示内部的RAM(随机读写存储器)为512B(贝特)。
40:外部晶振最高可接入的大小,表示芯片的外部晶振最高可接入40MHZ。
I:产的级别,I表示工业级,工作温度范围-40~+85°,C表示为商业级,稳定范围为0℃~+70℃.
PDIP:封装类型,PDIP表示为直插式。
1015:表示本芯片的生产日期10年的第15周。
COK816.GD:芯片的制造工艺或处理工艺相关。
描述的不全的可以参阅一下百度百科, 单片机介绍
单片机的外部引脚介绍
单纯的记忆引脚没有任何意义,有些引脚是作为固定的作用有些引脚的作用是是我们编程赋予的,最好的方法就是边学边记。不同的单片机引脚数不一样功能不一样。
以上图51单片机为例,在标示不清时根据如图的标志1芯片缺口摆放单片机,离标志2凹口最近的一个引脚为1脚,即为芯片的P1.0。左边从上至下为1到20脚,一般芯片的GNG(接电源负极)脚就在如图的芯片的左下角,右边从下至上为21脚到40脚,一般芯片的VCC(接电源正极)脚就在如图的芯片的右上角,
电平介绍
单片机的高低电平的依据与单片机的工作电压紧密相关,单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平,如在工作电压为5V的单片机中,高电平为+5V低电平为0V。计算机的串口芯片RS232C电平为负逻辑电平,高电平为-12V低电平为+12V。
常用逻辑电平与TTL、CMOS、LVTTL、ECL、PECL、GTL、RS232、RS422、RS485、LVDS等,其中TTL和CMOS的逻辑电平按照典型电压可分为4类:5V、3.3V、2.5V、1.8V。5V的TLL和CMOS为通用的逻辑电平。3.3V以下的都为低电压逻辑电平。ECL/PECL和LVDS是差分输入/输出,RS232是单端输入/输出。
TTL(晶体管逻辑电平)使用最多是因为数据表示通常采用2进制(我好想没有发现电路中右其它进制的数据表示形式),高电平等价于1低电平等价于0。
二进制与十六进制
数字电路中只有两种电平特性,即高低电平,从而决定了数字电路中使用二进制。在我们的世界中使用的是10进制,逢十进一借一当十是十进制的特点,从幼儿园就开始接触的加减乘除运算。在二进制中我们需要知道的是逢二进一借一当二,十进制的1转换到二进制位1,十进制的2转换为二进制因为已经满二所以需要进一,为10表示。十六进制当然同理,逢十六进一。这几个是在计算机语言中常用的进制,当然还有三四五六七八九进制(不要太当真,嘿嘿)。
在这里附上一张二/十/十六进制表吧
二进制 十进制 十六进制
0001 | 1 | 0x01 0010 | 2 | 0x02 |
---|
0011 | 3 | 0x03 | 0100 | 4 | 0x04 | 0101 | 5 | 0x05 | 0110 | 6 | 0x06 | 0111 | 7 | 0x07 | 1000 | 8 | 0x08 | 1001 | 9 | 0x09 | 1010 | 10 | 0x0a | 1011 | 11 | 0x0b | 1100 | 12 | 0x0c | 1101 | 13 | 0x0d 1110 | 1111 14 | 15 0x0e | 0x0f | 二进制的逻辑运算 ... 单片机51的基础知识介绍 ... 「深度学习福利」大神带你进阶工程师,立即查看>>> 1、创建tag,在项目文件右键,点击open in git shell 打开shell窗口 git tag -a v1.0 -m 'version 1.0' git push --tag 参考: http://www.cnblogs.com/chjw8016/archive/2012/11/08/2760290.html 「深度学习福利」大神带你进阶工程师,立即查看>>> 我们的设备在测试时发现有个别的主机,主程序DNS解释服务器域名失败。 最直接的表现就是 ping 126.com 显示: 对于这个问题,最直接的方式就是打开 /etc/resolv.conf 文件查看DNS服务器是否设置正确。结果该文件显示: search lan nameserver 127.0.0.1 博主用 strace ping 126.com 命令,分别比较了好的有问题的设备与没问题的设备。将输出信息用 meld 进行对比,结果看到在这里出现分歧: 可见, ping 命令在解释 "126.com" 域名时,是 connect 127.0.0.1:53 服务。而存在问题的一边,connect这个服务被拒绝了。 于是,博主可以分析得到,好的设备一定有一个服务进程bind了53端口,并提供了 DNS 服务。而有问题的设备一定是没有该进程。 博主在好的设备上运行 netstat -nap 找到了该服务: 同时我们又在问题的设备,执行 netstat -nap ,证实,有问题的设备上这个 dnsmasq 服务没有运行起来。 这里,博主查了些资料: Dnsmasq is a Domain Name System (DNS) forwarder and Dynamic Host Configuration Protocol (DHCP) server for small computer networks, created as free software. Dnsmasq has low requirements for system resources, can run on Linux, BSDs, Android and OS X, and is included in most Linux distributions. 博主归纳一下:dnsmasq就是一个DNS与DHCP的轻量级的服务。 由于OpenWrt本身就是一个路由器的系统,其自带 Dnsmasq 服务向其网络下的子网设备提供 DNS 与 DHCP 服务。而我们OpenWrt自身的程序解析域名时,也就向本地的 dnsmasq 请求解析。 那么,现在的问题是:为什么个别设备它的 dnsmasq 启动不起来? 对比好的设备,执行 ps 是能看到 dnsmasq 进程存在的。执行 /etc/init.d/dnsmasq stop 能停止它。这时候再 ping 126.com 它也是通的。为什么?博主查了一下 /etc/resolv.conf 文件,在停止 dnsmasq 之前,它的内容是: search lan nameserver 127.0.0.1 查一旦停止后,它就会变成: # Interface lan nameserver 202.96.128.166 nameserver 202.96.134.133 search bad 这是OpenWrt为了防止 dnsmasq 被停后无法解析域名,所以在停止之前,将其已知的域名服务器写入到 /etc/resolv.conf 文件中来。 相对于有问题的设备,其 /etc/resolv.conf 内容为: search lan nameserver 127.0.0.1 而 dnsmasq 进程并未被启动过(执行 ps 命令,列表中没有 dnsmasq 进程)。于是博主尝试执行: /etc/init.d/dnsmasq start ,然后执行: ps 查看进程。结果,dnsmasq 进程并没有如愿启动起来。 直接执行 dnsmasq 命令就可以启动服务,然后 ping 126.com 也能拼通。 那么问题应该是在 /etc/init.d/dnsmasq 文件中。博主打开 /etc/init.d/dnsmasq 看了一下,太多了,就不想全部贴出来了。相信大家也没有赖心看。下面只是摘要。 /etc/init.d/dnsmasq start 时会执行到: PROG=/usr/sbin/dnsmasq CONFIGFILE="/var/etc/dnsmasq.conf" <略...> start_service() { include /lib/functions config_load dhcp procd_open_instance procd_set_param command $PROG -C $CONFIGFILE -k procd_set_param file $CONFIGFILE procd_set_param respawn procd_close_instance <略...> } 可以了解到,真正执行的启动命令是: /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -k 手动执行这个命令,看能否启动 dnsmasq 服务: 如上,出错了。/var/etc/dnsmasq.conf 文件的第11行有重复的关键字。 这是一个重要的线索!打开 /var/etc/dnsmasq.conf 文件: 如上,第11行的关键字为 dhcp-leasefile 。对比好的设备的该文件。经对比,完全一致。 那问题又在哪儿呢? 是不是把 /var/etc/dnsmasq.conf 文件中的11行删除就可以了呢?尝试如此操作,结果还真是可以启动。 但这没有从根本解决问题。 是不是有别的配置文件,也有 dhcp-leasefile 关键字? 打开 /etc/dnsmasq.conf,这个文件与 /var/etc/dnsmasq.conf 完全一样。但是博主尝试用 /etc/dnsmasq.conf 替代 /var/etc/dnsmasq.conf,如下执行: /usr/sbin/dnsmasq -C /etc/dnsmasq.conf -k 结果没有问题,而如果指定的配置文件为 /var/etc/dnsmasq.conf 就有问题。博主很不理解。为了确保这两个文件是同一个,于是: rm /var/etc/dnsmasq.conf cp /etc/dnsmasq.conf /var/etc/dnsmasq.conf /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -k 结果: 博主只想说: What a fuck! 同样是配置文件,同样的内容,只是路径变了而已。为什么放 /var/etc/dnsmasq.conf 就会出错? 是不是 dnsmasq 默认就加载了 /etc/dnsmasq.conf ?如果有指定其它的配置文件,它就会出错? 于是: rm /var/etc/dnsmasq.conf mv /etc/dnsmasq.conf /var/etc/dnsmasq.conf /usr/sbin/dnsmasq -C /var/etc/dnsmasq.conf -k 结果: 证实一点,dnsmasq 确实默认加载了 /etc/dnsmasq.conf,不然为什么在我们将文件移走了,会报找不到 /etc/dnsmasq.conf 文件。这也说明了为什么我们强制性指定配置文件为 /var/etc/dnsmasq.conf 时会报重复关键字了。因为 /etc/dnsmasq.conf 也被加载了的。 对比好的设备里的 /etc/dnsmasq.conf 内容,结果发现: # Change the following lines if you want dnsmasq to serve SRV # records. # You may add multiple srv-host lines. # The fields are ,,,, # A SRV record sending LDAP for the example.com domain to # ldapserver.example.com port 289 #srv-host=_ldap._tcp.example.com,ldapserver.example.com,389 # Two SRV records for LDAP, each with different priorities #srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,1 #srv-host=_ldap._tcp.example.com,ldapserver.example.com,389,2 # A SRV record indicating that there is no LDAP server for the domain # example.com #srv-host=_ldap._tcp.example.com # The following line shows how to make dnsmasq serve an arbitrary PTR # record. This is useful for DNS-SD. # The fields are , #ptr-record=_http._tcp.dns-sd-services,"New Employee Page._http._tcp.dns-sd-services" # Change the following lines to enable dnsmasq to serve TXT records. # These are used for things like SPF and zeroconf. # The fields are ,,... #Example SPF. #txt-record=example.com,"v=spf1 a -all" #Example zeroconf #txt-record=_http._tcp.example.com,name=value,paper=A4 # Provide an alias for a "local" DNS name. Note that this _only_ works # for targets which are names from DHCP or /etc/hosts. Give host # "bert" another name, bertrand # The fields are , #cname=bertand,bert 里面没有一个配置项,与其 /var/etc/dnsmasg.conf 完全不一样。 OK,大致找到问题了。坏设备的 /etc/dnsmasg.conf 有了 /var/etc/dnsmasg.conf 一样的内容。所以,当 dnsmasq 加载完了 /etc/dnsmasg.conf 后再来加载 /var/etc/dnsmasg.conf 就出错了。 将 /etc/dnsmasg.conf 清空即可: rm /etc/dnsmasg.conf touch /etc/dnsmasg.conf 然后,再 /etc/init.d/dnsmasg start ,就成功了。 那为什么坏的主机 /etc/dnsmasg.conf 有内容?而不是像好的设备那样全是注释? 我们去 OpenWrt工程中找答案。 dnsmasg 在工程的如下路径上:package/network/services/dnsmasq/ 目录为: . ├── files │ ├── dhcp.conf │ ├── dnsmasq.conf │ ├── dnsmasq.hotplug │ └── dnsmasq.init ├── Makefile └── patches ├── 001-Build-config-add-DNO_GMP-for-use-with-nettle-mini-gm.patch ├── 002-fix-race-on-interface-flaps.patch ├── 100-fix-dhcp-no-address-warning.patch └── 110-ipset-remove-old-kernel-support.patch 2 directories, 9 files 目录下的 files/dnsmasq.conf 文件在安装后就是 /etc/dnsmasg.conf 文件。打开看,其内容就与好的设备上的 /etc/dnsmasq.conf 文件一致。 如果一个纯净的系统固件,是不会出这个问题的。 那么有两种可能: 由于脚本出错,致将 /var/etc/dnsmasg.conf 文件的内容写入到了 /etc/dnsmasg.conf 中 是我们在进行 sysupgrade 过程中,出错的 /etc/dnsmasg.conf 文件被遗留下来了 验证的方法为:断电重启,看 /etc/dnsmasg.conf 是否会再次变成与 /var/etc/dnsmasg.conf 一致。 结果正常。 好了,博主就分析到这里。这个问题算是已经解决了。 「深度学习福利」大神带你进阶工程师,立即查看>>> 本文转自迅为4412开发板实战教程书籍: http://www.topeetboard.com 迅为是基于Ubuntu12.04.2平台做开发,所有的配置和编译脚本也是基于此平台,没有在其它平台上测试过。如果你对Linux和Android开发很熟悉,相信你会根据错误提示逐步找到原因并解决,错误提示一般是选用的平台缺少了某些库文件或者工具等原因造成的;建议初学者使用和迅为一致的平台。 Uboot、Kernel以及Android等的编译环境看似复杂,其实只需要抓住以下四个要点。 (1)Uboot、Kernel编译器的安装。编译器在光盘中都有提供,在需要使用的步骤中,会说明编译器在光盘中的位置。 (2)设置环境变量。Uboot、Kernel、QtE、Qtopia编译器的环境变量设置后,编译的时候,系统才能找到编译器。 (3)Android文件系统的编译器。编译器需要使用Ubuntu系统自带的gcc编译器,但是版本不对,所以需要降低版本。迅为将这个过程编写了成几个简单的命令,用户只需要挨个执行命令即可。 (4)库文件。搭建过程中会给通过执行简单的脚本命令来安装库文件,复杂的步骤变的简单有效。 另外,如果用户想了解编译环境具体是怎么搭建起来的,可以利用提供的脚本文件和命令来学习。 1. 使用搭建好的编译环境 两种搭建编译环境的方式,一种方法是用户安装虚拟机,然后安装基础的Ubuntu12.04.2系统,利用迅为提供工具和详细的使用步骤,搭建编译环境;另外一种方法是用户安装虚拟机,然后直接加载“搭建好的Ubuntu镜像”,用户只需要修改一下编译器的环境变量,就可以直接用来编译源码。 以下详细讲解如何搭建编译环境。 需要注意的是,搭建过程中用到的各类软件,都需要和手册提到的版本保持一致,如果使用的是“搭建好的镜像”,则可以跳过这一节,但是编译的时候要针对性的设置一下环境变量。 2. 安装基本软件 Ubuntu系统需要一些基础软件,便于后续使用。 (1)安装虚拟机“Vmware_Workstaion_wm” (2)然后使用虚拟机安装“Ubuntu12.04.2初始系统”。 (3)安装完成后进入Ubuntu的终端,激活root用户; (4)接着登录root用户; (5)虚拟机设置联网、CPU、内存、USB等; (6)将Ubuntu数据源地址修改为国内163服务器地址; (7)使用“apt-get update命令”更新数据源; (8)在Ubuntu安装软件vim,apt-get install vim; (9)在Ubuntu安装软件ssh,apt-get install ssh。 3. 交叉编译工具 编译的时候需要用到交叉编译工具,本小节介绍如何安装编译Uboot和Kernel的编译工具arm-2009q3。 提供的交叉编译工具是用户光盘“02_编译器以及烧写工具”→“arm交叉编译器”文件夹中的压缩包“arm-2009q3.tar.bz2”。 使用SSH工具将交叉编译工具拷贝到 Ubuntu12.04.2系统的文件夹“usr”-->“local”-->“arm”中,local下默认没有arm文件夹,可以新建一个。 使用命令“cd /usr/local/arm/”进入/usr/local/arm文件夹,然后使用解压命令“tar -vxf arm-2009q3.tar.bz2”解压压缩包。 接着修改交叉编译工具路径,需要修改环境变量。在Ubuntu命令行中,执行命令“cd /root”和“vim .bashrc”,打开环境变量文件“.bashrc”。 如下图所示,在“.bashrc”文件中的最后一行添加如下信息: “export PATH=$PATH:/usr/local/arm/arm-2009q3/bin” 修改完成后保存退出。执行更新环境变量“source .bashrc”的命令。 最后,在Ubuntu命令行中输入命令“arm”,然后按TAB键,如果在命令行中能够看到arm编译器的信息,就表明交叉编译工具安装成功。如下图所示。 4. 安装库文件、JDK以及降低GCC版本 为了方便用户,我们将库文件和JDK的安装命令制作成了脚本文件,用户只要执行两个脚本就可以安装库文件和JDK。这两个脚本在用户光盘“02_编译器以及烧写工具”→“tools”文件夹下的压缩包“Android_JDK.tar.bz2”中。 用户将压缩包拷贝到Ubuntu系统中,解压压缩包会生成文件夹“Android_JDK”。使用cd命令,进入解压出来的“Android_JDK” -->“jdk6”文件夹。如下图所示,使用命令“./install-sun-java6.sh”运行脚本文件“install-sun-java6.sh”。需要注意的是,这条命令执行完毕可能会耗时15分钟以上。执行脚本的时,根据提示输入对应的选择命令。 前一个脚本运行完毕之后,如下图所示,进入解压出来的文件夹“Android_JDK”中,执行命令“./install-devel-packages.sh”运行脚本“install-devel-packages.sh”,安装库文件,需要注意的是,这条命令可能会耗时40分钟以上。上面脚本执行的时候,需要根据提示输入选择命令。 上面这个脚本执行完毕的时候,要注意一下是否有些库文件提示没有安装。如果发现有库文件没有安装的情况,有可能是网络不好或者下载源丢失。这个时候请使用一下更新下载源的命令”apt-get update“,然后再执行一下上面的两个脚本。 例如,如下图所示,再次运行“./install-devel-packages.sh”之后,如没有提示‘无法安装的库和软件’,那么表明已经安装完整了。 最后介绍降低Android编译器GCC版本的方法。 使用Ubuntu编译Android的时候需要用到Ubuntu系统自带的GCC4.4.7编译器,但是安装的Ubuntu12.04.2版本,它的GCC版本过高,所以这里需将GCC编译器的版本降低到4.4.7。 进入前面解压的文件夹“Android_JDK”中,找到文本“update_gcc.txt”,打开文本“update_gcc.txt”后会看到里面有8条命令,这8条命令需要在Ubuntu命令行中依次执行。 使用命令打开“update_gcc.txt”文件,如下图所示。 在依次执行了这8条命令之后,Ubuntu系统就将gcc的版本降低到4.4.7。使用命令“gcc -v”,可以看到gcc的版本为4.4.7了。 在执行这8条命令时,只有第一条命令会耗时10分钟左右,其它的都会很快完成。需要注意的是,命令一定要依次执行,不能有遗漏。 「深度学习福利」大神带你进阶工程师,立即查看>>> 这样处理 删除 @val = @{$canned_values{$hz}}; if (!defined(@val)) { @val = compute_values($hz); } output前面加入 $cv = $canned_values{$hz}; @val = defined($cv) ? @$cv : compute_values($hz); 「深度学习福利」大神带你进阶工程师,立即查看>>> PN结中的电荷量随外加电压而变化,呈现电容效应,称为结电容又称为微分电容.结电容影响PN结的工作频率,特别是在高速开关状态时,使其单向导电性 变坏,甚至不能工作,在 深入研究PN结的电容特性后,发现PN结电容是由势垒电容和扩散电容两种性质不同的因素共同造成的. 1 、势垒电容CB PN结交界处形成的势垒区,即空间电荷区,是积累空间电荷的区域,极性不同的电荷分别处于界面两侧(P区和N区),就好象平行板电容器的极板一样。这 两个区域能够存放电荷(载流子),即充电;也能够被取走电荷,即放电。于是,当PN结两端电沍变化时,将引起PN结空间电荷的改变,表现为电容性效 应, 同时引起势垒层的变化,可以用势垒电容GB来描述这种效应。 当PN结处于正向偏置状态,且正向电压升高时,N E和P K中的多数载流子便进入阻挡层并与其中部分相反极性的空间电荷中和,就好像把这些载流子存 放在空间电荷区一样。这种现象称为载流子的存储效应存储电荷童随正偏座的增加而增加,相当 于栽流子向势垒电容充电。当外加正向电压洚低时,又会有一部分 载流子离开阻挡层,像被从PN结中取出一样,即相当于势垒电容的放电.应当注意,势垒电容不是一个固定不变的值,其大小随外加电压而改变,当外加电压保持 不变时,阻挡层中空间电荷 的数目也保持不变,势垒电容也停止了充放电。可见,势垒电容只在外加电压变化时才起作用,外加电压频率越高,势垒电容的 作用 越显著。势垒电容&的大小与PN结截面积成正比,与阻挡层厚度成反比。 2、扩散电容CD PN结的正向电流是由P区中的空穴和N芪中的电子相互扩散造成的。当PN结外加正向电压时,大量电子由N区进入P区, 空穴由P区进入N区;但电子进 入P区后并不是立即与空穴复合而消失,而是在靠近耗尽层的一定距离内(通常称为扩散长度)一面继续扩散,一面与空穴复合后消失,反之类同,可见在扩散长度 内存储了一定数量的电荷,正向电流越大,存锗电荷越多.它们随正向电压的变化亦具有电容的性质,称为扩散电容CD。 综上所述,PN结电容Cj的两种成分在不同外加电压条件下所占的份额不同.在正向偏置状态下,当正向电压较低时,因扩散运动较弱,扩散电容比较小,势 垒电容占主要成分;正向电冱较高时,扩散运动加剧,使扩散电容按指数规律上升,成为PN结电容的主要成分。在反向偏置状态下,因扩散运动被抑制,因而表现 出较小的扩散电容,因此结电容以势垒电容为主,如图2-2所示。 「深度学习福利」大神带你进阶工程师,立即查看>>> 基础篇 http://blog.csdn.net/zhzht19861011/article/category/5950097 高级篇 http://blog.csdn.net/zhzht19861011/article/category/6191478 官方 What is An RTOS WhyUseRTOS 「深度学习福利」大神带你进阶工程师,立即查看>>> 常用软件的安装keil的安装配置 安装Keil,建议安装Keil4。下载MDK,直接安装即可,然后使用keygen.exe注册机破解。 安装之后,打开Keil,点击菜单栏File进入License Management... 打开之后如下图,复制CID 打开注册机,如下图粘贴到注册机,选择Target,点击Generate生成注册码,然后复制会keil注册栏目中。 如下图,复制后点击AddLlc。注册成功后会用使用到期时间。下图是注册失败提示的错误信息 |