目录标题
Keil 是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供 了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision) 将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果使用C语言编程,那么Keil几乎是不二之选,即使不使用C语言而仅用汇编语言编程,其集成环境强大的软件仿真调试也会令事情事半功倍。
(1)下载完keil5压缩包,鼠标右键解压。
(2)打开文件,找到“mdk536”,右键“以管理员身份运行”

(3)点击“Next>>”

(4)勾选“I agree to all the terms of…”,然后点击“Next>>”

(5)点击“Browse”,两个都安装到其他盘(不建议c盘),再点击“Next>>”

(6)四个内容随便填,再点击“Next>>”

(7)等待安装

(8)点击“Finish”,结束。
(1)双击打开“keil uVision5”

(2)点击菜单栏File,然后点击License选项。

(3)复制左上角的ID号

(4)在解压文件夹中找到“keygen”,鼠标右键“以管理员身份运行”。

(5)复制CID中的内容,将其粘贴到①中,然后选择②“Target”选项框中ARM选项,再点击“Generate”,然后复制生成内容

(6)将其粘贴“New license”中然后点击“Add LIC”。点击“close”,即安装完成!

(1)进入keil中,点击“pack installer”组件

(2)在“device”中点击“STM……”开头的文件,点击“+”号,找到“STM32F1 series”

(3)在右侧的菜单栏中,找到对应的软件包下载即可。之前已经装过pack,因此显示已安装。

(1)点击“project”-“new μVision project”,之后“Ctrl+s”保存工程。
(2)工程建好后,会弹出“芯片选型”窗口,在此界面下进行芯片选型;

(3)芯片选型结束后,出现配置窗口,勾选对应选项,点击OK即可;

(1)点击“source”,右键“Add new item to…”,新建文件,之后“Ctrl+s”保存文件,文件命名为text.s
注意:一定要以.s结尾,汇编语言,否则会出错

(1)生成HEX文件,点击“魔法棒按钮”-“ouput”,将“Create Hex file”选项勾选起来


(2)修改“Debug”模式为“软件仿真”。依旧点开“魔法棒”-“Debug”,修改为“Use Simulater”。
其中,修改Dialog DLL内容:DARMSTM.DLL;修改Parameter:-p+芯片型号选型

(1)写入如下程序:
AREA MYDATA, DATA
AREA MYCODE, CODE
ENTRY
EXPORT __main
__main
MOV R0, #10
MOV R1, #11
MOV R2, #12
MOV R3, #13
;LDR R0, =func01
BL func01
;LDR R1, =func02
BL func02
BL func03
LDR LR, =func01
LDR PC, =func03
B .
func01
MOV R5, #05
BX LR
func02
MOV R6, #06
BX LR
func03
MOV R7, #07
MOV R8, #08
BX LR
(2)编译,按菜单栏上的“下载”按钮。


(3)调试。
按下菜单栏“D”按钮,进入调试

------------------------------------------------------------------------
知识充电站
------------------------------------------------------------------------
调试常用按钮介绍:

| 序号 | Value |
|---|---|
| 1 | 将程序复位到主函数开始处 |
| 2 | 全速运行程序,运行时不停止 |
| 3 | 停止全速运行(在全速运行时激活) |
| 4 | 下一步(语句依次执行) |
| 5 | 下一步(在主函数中按行依次执行,不会进入子函数) |
| 6 | 在进入子函数内部时激活,执行完剩余子函数命令,并进入主函数 |
| 7 | 程序运行至光标选中行 |
| 8 | 显示/隐藏编译窗口,可以查看C语言编译后对应的汇编语言 |
| 9 | 显示/隐藏变量观察窗口,可以查看当前变量值 |
(1)首先在object文件中找到HEX文件:

(2)通过记事本的形式打开hex文件,其内容是这样的:
:020000040800F2
:100000000006002031010008390100083B0100080A
:100010003D0100083F010008410100080000000008
:100020000000000000000000000000004301000884
:1000300045010008000000004701000849010008D0
:100040004B0100084B0100084B0100084B01000860
:100050004B0100084B0100084B0100084B01000850
:100060004B0100084B0100084B0100084B01000840
:100070004B0100084B0100084B0100084B01000830
:100080004B0100084B0100084B0100084B01000820
:100090004B0100084B0100084B0100084B01000810
:1000A0004B0100084B0100084B0100084B01000800
:1000B0004B0100084B0100084B0100084B010008F0
:1000C0004B0100084B0100084B0100084B010008E0
:1000D0004B0100084B0100084B0100084B010008D0
:1000E0004B0100084B0100084B0100084B010008C0
:1000F0004B0100084B0100084B0100084B010008B0
:100100004B0100084B0100084B0100084B0100089F
:100110004B0100084B0100084B0100084B0100088F
:100120004B0100084B0100084B0100084B0100087F
:100130000948804709480047FEE7FEE7FEE7FEE77B
:10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7
:10015000054A064B7047000041020008990200085A
:100160000000002000060020000200200002002005
:10017000704770477047000080B500F001F880BDFF
:1001800082B041F204000021C4F20200019100910A
:1001900050F8041C41F4803140F8041C50F8041C51
:1001A00001F400310091019901310191009919B9CF
:1001B0000199B1F5A06FF1D150F8041C890354BF27
:1001C0000021012100910099012936D142F200015C
:1001D000C4F202010A6842F010020A600A6822F0C2
:1001E00007020A600A6842F002020A6001680160C0
:1001F00001680160016841F480610160016821F4D7
:100200007C110160016841F4E811016050F8041CA0
:1002100041F0807140F8041C50F8041C8901FBD5A2
:10022000016821F003010160016841F002010160F1
:10023000016801F00C010829FAD102B070470000F2
:1002400080B541F20000C4F202000168002241F0D2
:10025000010101604168CFF6FF0211404160016871
:100260004FF6FF72CFF6F66211400160016821F48B
:1002700080210160416821F4FE0141604FF41F01BB
:100280008160FFF779FF4EF60850CEF200004FF084
:100290000061016080BD00004FF00A004FF00B01CB
:1002A0004FF00C024FF00D0300F009F800F00AF8CF
:1002B00000F00BF8DFF81CE0DFF81CF0FEE74FF071
:1002C000050570474FF0060670474FF007074FF0DF
:0C02D00008087047BF020008CB020008BD
:040000050800029954
:00000001FF
该文件为16进制的一串字符。hex文件的第一排字符称之为扩展线性地址记录,也称为32位地址记录或HEX386记录。
在第一行数据020000040800F2中,其实际表达为0x02 0x00 0x00 0x04 0x08 0x00 0xf2。具体含义为
第一个字节 0x02表示本行数据的长度;
第二、三字节 0x00 0x00表示本行数据的起始地址;
第四字节 0x04表示数据类型。数据类型有:0x00、0x01、0x02、0x03、0x04、0x05;
‘00’ Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录;
‘01’ End of File Record: 用来标识文件结束,放在文件的最后,标识HEX文件的结尾;
‘02’ Extended Segment Address Record: 用来标识扩展段地址的记录;
‘03’ Start Segment Address Record:开始段地址记录;
‘04’ Extended Linear Address Record: 用来标识扩展线性地址的记录;
‘05’ Start Linear Address Record:开始线性地址记录;
然后是数据,0x08 0x00
最后一个字节 0xf2为校验和。
HEX 文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 个 HEX 记录 。 这些记录由对应机器语言码和/或常量数据的十六 进 制编码数字组成。
HEX 文件通常用于传输将被存于ROM 或者EPROM 中的程序和数据。大多数EPROM 编程器或模拟器使用HEX 文件。
(1)域
Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc
每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:
每个Intel HEX记录都由冒号开头.
(2)ll 是数据长度域
它代表记录当中数据字节(dd)的数量。
(3)aaaa 是地址域
它代表记录当中数据的起始地址。
(4)tt 是代表HEX记录类型的域
它可能是以下数据当中的一个:
00 – 数据记录
01 – 文件结束记录
02 – 扩展段地址记录
04 – 扩展线性地址记录
(5)dd 是数据域
它代表一个字节的数据。一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符。
(6)cc 是校验和域
它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。
Intel HEX文件由任意数量以回车换行符结束的数据记录组成。数据记录外观如下:
:10246200464C5549442050524F46494C4500464C33
其中:
10代表这个记录当中数据字节的数量。
2462 :数据将被下载到存储器当中的地址。
00 :记录类型(数据记录)
464C…464C是数据。
33: 记录的校验和。
在创建.s文件时,忘记将该文件拖入工程中,导致在编译时未通过,提示Target not created.之后经过检查以及查阅资料,发现是因为未将文件加入创建的工程中。以后可以直接通过点击“source”,右键“Add new item to…”,新建文件的方式,避免错误的发生!
1.https://blog.csdn.net/qq_45659777/article/details/120496577
2.https://blog.csdn.net/OverWatcher/article/details/80069438
3.https://blog.csdn.net/weixin_43822014/article/details/108917904
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po