启动代码txt

合集下载

PEX启动网络安装系统

PEX启动网络安装系统

PEX启动网络安装系统Ghost 使用详解一、分区备份使用Ghost进行系统备份,有整个硬盘(Disk)和分区硬盘(Partition)两种方式。

在菜单中点击 Local(本地)项,在右面弹出的菜单中有3个子项,其中 Disk表示备份整个硬盘(即克隆)、Partition 表示备份硬盘的单个分区、Check 表示检查硬盘或备份的文件,查看是否可能因分区、硬盘被破坏等造成备份或还原失败。

分区备份作为个人用户来保存系统数据,特别是在恢复和复制系统分区时具有实用价值。

选 Local→Partition→To Image 菜单,弹出硬盘选择窗口,开始分区备份操作。

点击该窗口中白色的硬盘信息条,选择硬盘,进入窗口,选择要操作的分区(若没有鼠标,可用键盘进行操作: TAB键进行切换,回车键进行确认,方向键进行选择)。

在弹出的窗口中选择备份储存的目录路径并输入备份文件名称,注意备份文件的名称带有 GHO 的后缀名。

接下来,程序会询问是否压缩备份数据,并给出3个选择:No 表示不压缩,Fast表示压缩比例小而执行备份速度较快,High 就是压缩比例高但执行备份速度相当慢。

最后选择 Yes 按钮即开始进行分区硬盘的备份。

Ghost 备份的速度相当快,不用久等就可以完成,备份的文件以 GHO 后缀名储存在设定的目录中。

二、硬盘克隆与备份硬盘的克隆就是对整个硬盘的备份和还原。

选择菜单Local→Disk→To Disk,在弹出的窗口中选择源硬盘(第一个硬盘),然后选择要复制到的目标硬盘(第二个硬盘)。

注意,可以设置目标硬盘各个分区的大小,Ghost 可以自动对目标硬盘按设定的分区数值进行分区和格式化。

选择 Yes 开始执行。

Ghost 能将目标硬盘复制得与源硬盘几乎完全一样,并实现分区、格式化、复制系统和文件一步完成。

只是要注意目标硬盘不能太小,必须能将源硬盘的数据内容装下。

Ghost 还提供了一项硬盘备份功能,就是将整个硬盘的数据备份成一个文件保存在硬盘上(菜单 Local→Disk→To Image),然后就可以随时还原到其他硬盘或源硬盘上,这对安装多个系统很方便。

各种手机指令命令代码大全

各种手机指令命令代码大全

各种手机指令命令代码大全.txt结婚就像是给自由穿件棉衣,活动起来不方便,但会很温暖。

谈恋爱就像剥洋葱,总有一层让你泪流。

手机部资料:--------------------------- 国产手机 TI 平台 MTK 平台 ADI 平台展讯平台凯明平台英飞凌平台飞利浦平台摩托罗拉平台 --------------------------- 欢迎大家来顶!!!MTK平台手机指令大全设置指令:*#66*#中文语言:*#0086# + send查看版本:*#8375#软件版本:*#8882#测试:*#87#调试:*#8899# (?)默认语言:*#0000#+通话键设置英文:*#0044#+通话键繁体中文:*#0886#+通话键简体中文:*#0086#+通话键串号查询:*#06#原厂设置:*#66*#查看版本:*#8375#工厂指令:*#3646633#自动测试:*#87#软件版本:*#8882#*#035670766*001#*#035670766*002#有一些机器开机输入*#66*#不进测试的。

可以在开机瞬间,在按键灯亮和开机音乐响的时候快速按*#*#............*#就可进入测试科达Q191(MT6228平台)有些好象不支持,可惜啊..........诺基亚是国际知名手机品牌,它在中国市场上一直占据着很大一部分销售份额。

诺基亚手机拥有着时尚的外观和强大的功能,尤其是它出色的性能,经久耐用。

是赢得很多消费者喜爱的主要原因。

不少消费者在购买诺基亚手机之后,都会拿着说明书仔细阅读使用说明。

然而,不管是什么牌子的手机除了说明书上的那些说明文字之外,都还有很多用户并不知晓的操作命令!而这些使用命令却能够给我们的使用上提供很大的帮助。

1 输入*#06#:显示IMEI码2 输入*#0000#:显示软件版本 (部分型号如果不起作用,可按*#型号代码#,如*#6110#)第一行--软件版本;第二行--软件发布日期;第三行--手机型号3 输入*#92702689#查询更多的手机信息。

死机代码

死机代码

死机代码.txt生活,是用来经营的,而不是用来计较的。

感情,是用来维系的,而不是用来考验的。

爱人,是用来疼爱的,而不是用来伤害的。

金钱,是用来享受的,而不是用来衡量的。

谎言,是用来击破的,而不是用来装饰的。

信任,是用来沉淀的,而不是用来挑战的。

死机代码一览表使用Windows出现死机、蓝屏、黑屏是常有的事,每每因为不清楚错误的来源而频繁重新安装系统,费时又费力。

收集了一些Windows死机代码,供大家在碰到这类故障时参考以便更快地修复故障。

0 0x0000 作业完成。

1 0x0001 不正确的函数。

2 0x0002 系统找不到指定的档案。

3 0x0003 系统找不到指定的路径。

4 0x0004 系统无法开启档案。

5 0x0005 拒绝存取。

6 0x0006 无效的代码。

7 0x0007 储存体控制区块已毁。

8 0x0008 储存体空间不足,无法处理这个指令。

9 0x0009 储存体控制区块位址无效。

10 0x000a 环境不正确。

11 0x000b 尝试载入一个格式错误的程式。

12 0x000c 存取码错误。

13 0x000d 资料错误。

14 0x000e 储存体空间不够,无法完成这项作业。

15 0x000f 系统找不到指定的磁碟机。

16 0x0010 无法移除目录。

17 0x0011 系统无法将档案移到其他的磁碟机。

18 0x0012 没有任何档案。

19 0x0013 储存媒体为防写状态。

20 0x0014 系统找不到指定的装置。

21 0x0015 装置尚未就绪。

22 0x0016 装置无法识别指令。

23 0x0017 资料错误 (cyclic redundancy check)24 0x0018 程式发出一个长度错误的指令。

25 0x0019 磁碟机在磁碟找不到持定的磁区或磁轨。

26 0x001a 指定的磁碟或磁片无法存取。

27 0x001b 磁碟机找不到要求的磁区。

28 0x001c 印表机没有纸。

电脑启动提示信息大全

电脑启动提示信息大全
运行CONFIG.SYS文件中的设备驱动
Process your startup command file (AUTOEXEC.BAT)
运行AUTOEXEC.BAT中的启动命令
Load the Windows graphical user interface
装入WINDOWS图形用户界面(GDI)
Warning: Windows has detected a registry/configuration error. Choose, Command prompt only, and run SCANREG
在你的CONFIG.SYS里有一个无效的国家代码
There is an error in the COUNTRY command in your CONFIG.SYS file
在你的CONFIG.SYS里有一个错误的设置国家命令
There is not enough memory for the COUNTRY.SYS file
地址线A20错误。联系技术支持来识别该问题
Starting Windows 98...
正在启动Windows 98……
Windows 98 is now starting your MS-DOS-based program
Windows 98正在启动基于MS-DOS的程序
Windows 98 is now restarting...
从你的供应商那里获得一个与Windows版本相兼容的版本
Process the system registry
运行系统注册表
Create a startup log file (BOOTLOG.TXT)
创建启动日志BOOTLOG.TXT文件

VS2008下用MFC 在下拉框中显示TXT中内容

VS2008下用MFC 在下拉框中显示TXT中内容

VS2008下用MFC 在下拉框中显示TXT中内容首先感谢网络资源吧,自动化出身的人不一定要做什么行业,可能是通讯,可能是软件,也可能是电气…总之多学习知识总是好的,本文步骤比较详细,但难免有错误,望指正交流,QQ835323740。

首先启动VS2008,文件——新建——项目(快捷键Ctrl+Shift+N),项目类型——Visual C++——MFC——模板——MFC应用程序,●名称(如ShowTxt)。

●位置(如桌面下)。

●解决方案名称(会随着名称自动生成,建议不要修改)点击确定,进入MFC应用程序向导。

选择下一步,不要直接点完成。

选择——基于对话框。

然后下一步,把“关于”框(B)点掉,可以点完成了。

进入界面把对话框窗口中的静态文本控件,两个按钮控件都删掉,(选中后按Delete键即可),修改后的界面如下图。

在对话框中添加一个下拉框控件(Combo Box)。

界面完成后可以添加代码了,先添加变量,选中combo box控件,单击鼠标右键,选择添加变量:下图:处理程序(A),选择SETFOCUS,点击添加编辑,跳转到程序部分,先不要添加。

代码部分是重点:1.我们在void CShowTxtDlg::OnCbnSetfocusCombo1()中添加下列代码,用于打开和关闭txt文件void CShowTxtDlg::OnCbnSetfocusCombo1(){// TODO: 在此添加控件通知处理程序代码m_combo_show.ResetContent();CStdioFile file;if(!file.Open(_T("123.txt"),CFile::modeRead)) //打开文件{AfxMessageBox(_T("unable to open file"));//文件不存在弹出对话框提示}CString strLine=_T("");setlocale( LC_CTYPE, "chs" ); //接受中文while(file.ReadString(strLine)){m_combo_show.AddString(strLine);}file.Close();}//---------------------------------------------------------------------------//---------------------------------------------------------------------------2.我们在ShowTxtDlg添加头文件#include<locale.h>,用于中文显示的头文件。

易语言超级列表框导入TXT内容的方法

易语言超级列表框导入TXT内容的方法

易语⾔超级列表框导⼊TXT内容的⽅法易语⾔开发windows程序中,经常需要⽤到超级列表框处理⼀些数据。

那么除了在超级列表框开发中添加数据之外,我们还怎么从TXT中导⼊内容?
下⾯本教程⼿把⼿教您怎么操作。

1.打开”易语⾔“
2.在”易语⾔“菜单栏中,选择”程序“-”新建“
1.在弹出的”新建“对话框中,选择”windows窗⼝程序“
2.点击”确定“
1.在”易语⾔“程序的右边选择"扩展组件"
2.在”扩展组件“中选择”超级列表框“
3.添加到界⾯
1.界⾯中选择”超级列表框“
2.在左边⼯作夹选择”超级列表框“的类型,选择”报表列表框“
1.在界⾯中,选择”超级列表框“之后,⿏标右键弹出对话选择”设置报表列“
1.插⼊列
2.设置报表列内容
TXT⾥⾯的内容
1.选择”_启动窗⼝“
2.双击”_启动窗⼝“进⼊程序集
”__启动窗⼝_创建完毕“⼦程序添加代码:
按下F5,运⾏程序就完成从TXT导⼊内容的操作
以上就是⼩编整理的相关内容,希望能够帮助到⼤家。

windows命令行中启动应用程序

windows命令⾏中启动应⽤程序⽬的:效果⽅法1. 创建批处理脚本2. 设定环境变量3. 测试功能4. 扩展功能⽬的:在windows的命令⾏界⾯中,输⼊简单的⼏个字符就可以启动相应的应⽤程序。

例如:输⼊mail,E-mail就⾃⾏启动,⼗分⽅便。

以后就不⽤在电脑桌⾯上放那么多菜:)效果⽅法以E-mail为例⼦来说明具体的实现⽅法1. 创建批处理脚本创建路径C:\other\shell(根据⾃⼰爱好创建存放脚本的路径)在此路径下新建⼀个⽂本⽂件,如mail.txt在此⽂件中写⼊下⾯的代码@echo offecho Start APP E-mailstart "dummyclient" "C:/Program Files (x86)/Microsoft Office/Office14/OUTLOOK.exe"echo successfully open the App1234此处的outlook路径要更该成你的!保存⽂件,并把⽂件名更改为mail.cmd2. 设定环境变量⾸先右键点击桌⾯上 “我的电脑” ->>”属性”->>”⾼级系统设置”->>”环境变量”->>”系统变量”然后双击变量“”路径”,把C:\other\shell加⼊其中3. 测试功能⾸先打开命令⾏cmd,快捷键”win+R” 输⼊”cmd” 按Enter键然后在命令⾏中输⼊”mail”E-mail 就会⾃⾏启动特别注意:a. ⽂件名是和命令相关的。

上⾯的⽂件名是mail.cmd, 命令名就是mailb. ⽂件取名长度最好2-4个字符,字符太长不⽅便输⼊4. 扩展功能按照⽅法中的1-3,我们同样可以启动其他应⽤程序,只要新建⼀个⽂档gvim.cmd, 程序更改为:。

启动软盘引导程序源代码

; in the correct place.
main :
cli ; Stop interrupts till stack ok
xor AX , AX
mov ds , ax
mov es , ax
mov SS , AX ; Work in stack just below this routine
启动软盘引导程序源代码
启动软盘引导程序源代码
作者:易华卫 来源:易老师的个人网站 加入时间:2005-09-06 01:09:19 下面是软盘引导程序源代码,用NASM编译。目前性能基本上稳定了,代码长度已经到了512BYTE,一扇区用完了。 ; ==========================================================================
; E9H xxH 00H jmp Key_F7
;
; Case Default: Show message and wait 8 second
mov ah , 11 h ; Get keyboard status
; 这是一个用来引导我的系统备份/恢复光盘的启动软盘的程序,将会放在软盘的第一
; 个扇区内。此程序引导系统时,出现一个提示,用户可选择按任意键启动工具软盘,
; 也可以在等待8秒后引导硬盘上的操作系统。在选择由工具软盘启动DOS后,在MBR中
; 隐藏的FAT32主分区(0B/0C)将会分配盘符变得可见,这就可以用常规工具来做备
BIO_MEM EQU 0413 H ; BIOS Memory size =640(KB)
BIO_CLK EQU 046 CH ; BIOS Clock (1/18.2 seconds)

51单片机启动代码


; Version 8.01
;
; *** <<< Use Configuration Wizard in Context Menu >>> ***
;------------------------------------------------------------------------------
表1
Name
Description
IDATALEN
Specifies the number of bytes of idata to clear to 0. The default is 80h because most 8051 derivatives contain at least 128 bytes of internal data memory. Use a value of 100h for the 8052 and other derivatives that have 256 bytes of internal data memory.
;IDATALEN:IDATA存储区的大小<0-256>,可以根据自己的选择修改
; <i> Note: The absolute start-address of IDATA memory is always 0
; <i> The IDATA space overlaps physically the DATA and BIT areas.
XBPSTACK
Specifies whether or not the large model reentrant stack pointer (?C_XBP) should be initialized. A value of 1 causes this pointer to be initialized. A value of 0 prevents initialization of this pointer. The default is 0.

电脑自动关机源代码

电脑自动关机源代码.txt成熟不是心变老,而是眼泪在眼里打转却还保持微笑。

把一切平凡的事做好既不平凡,把一切简单的事做对既不简单。

startCLSCOLOR 1frem 使用COLOR命令对控制台输出颜色进行更改MODE con: COLS=41 LINES=18rem MODE语句为设定窗体的宽和高set tm1=%time:~0,2%set tm2=%time:~3,2%set tm3=%time:~6,2%ECHO %date% %tm1%点%tm2%分%tm3%秒ECHO =========================================ECHO 请选择要进行的操作,然后按回车ECHO ───────────────ECHO.ECHO 1. 定时关机ECHO 2. 倒计时关机ECHO 3. 删除定时关机任务ECHO 4. 查看任务状态ECHO 5. 刷新当前时间ECHO 6. 重新启动ECHO 7. 锁定计算机ECHO 8. 注销ECHO 9. 退出ECHO.:choSET Choice=SET /P Choice=选择:rem 设定变量"Choice"为用户输入的字符IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%rem 如果输入大于1位,取第1位,比如输入132,则返回值为1ECHO.IF /I "%Choice%"=="1" GOTO SetHourIF /I "%Choice%"=="2" GOTO outtimeIF /I "%Choice%"=="3" GOTO delAtIF /I "%Choice%"=="4" GOTO viewIF /I "%Choice%"=="5" GOTO startIF /I "%Choice%"=="6" GOTO restartIF /I "%Choice%"=="7" GOTO lockIF /I "%Choice%"=="8" GOTO logoffIF /I "%Choice%"=="9" GOTO endrem 为避免出现返回值为空或含空格而导致程序异常,需在变量外另加双引号rem 注意,IF语句需要双等于号rem 如果输入的字符不是以上数字,将返回重新输入ECHO 选择无效,请重新输入ECHO.GOTO cho:SetHourCLSECHO.SET ask=SET /p ask=是否设定为每天执行关机命令(y/n):IF NOT "%ask%"=="" SET ask=%ask:~0,1%IF /I "%ask%"=="y" GOTO yesIF /I "%ask%"=="n" GOTO noGOTO SetHour:yesECHO 请指定24小时制式时间,格式为小时:分钟SET shutdowntime=SET /p shutdowntime=输入:at %shutdowntime% /every:M,T,W,Th,F,S,Su tsshutdn 0 /delay:0 /powerdown >nul rem 设定为每周的星期一至星期日,即为每天IF NOT errorlevel 1 GOTO okrem 如果输入正确,就执行ok段的语句ECHO %shutdowntime% 不是标准的时间格式,请重新输入ECHO.GOTO yes:noECHO 请指定24小时制式时间,格式为小时:分钟SET shutdowntime=SET /p shutdowntime=输入:at %shutdowntime% tsshutdn 0 /delay:0 /powerdown >nul IF NOT errorlevel 1 GOTO okECHO %shutdowntime% 不是标准的时间格式,请重新输入ECHO.GOTO no:okECHO.SET h=%shutdowntime:~1,1%SET ah=%shutdowntime:~0,1%SET am=%shutdowntime:~2,2%SET bh=%shutdowntime:~0,2%SET bm=%shutdowntime:~3,2%IF "%h%"==":" (SET HM=%ah%时%am%分) ELSE (SET HM=%bh%时%bm%分)rem 如果输入h:mm则HM=h时mm分,否则HM=hh时mm分IF /I "%ask%"=="y" ECHO 系统将于每天的%HM%关闭IF /I "%ask%"=="n" ECHO 系统将于%HM%关闭ECHO 设定完毕! 按任意键继续...PAUSE >nulGOTO start:outtimeCLSECHO.ECHO 请输入倒计时秒数ECHO ────────ECHO (设定后要取消,单击"确定"后按Ctrl+C键两次) SET timed=SET /p timed=输入:tsshutdn %timed% /delay:0 /powerdown >nulIF not errorlevel 1 GOTO okECHO %timed% 是无效的关机时间,请重新输入ECHO.GOTO outtime:delAtclsecho.at /del /yecho 定时关机任务已取消,按任意键继续...pause >nulGOTO start:viewMODE con: COLS=85 LINES=18COLOR 70ECHO.atECHO 按任意键继续...PAUSE >nulGOTO start:restartshutdown -r -t 0:lockrundll32.exe user32.dll,LockWorkStationgoto start:logofflogoff:endexit(注:可编辑下载,若有不当之处,请指正,谢谢!)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

要是早看了下面的两篇文章,呵呵,学习进度应该能快很多吧,文章分享了,大家自己看啊。

周立功lpc21xx/lpc22xx系列ARM7启动代码分析摘自搜狐博客技术为王博友网上已经有人做了一个周立功lpc2000(ARM7TDMI)启动代码分析的文章, 我本来想做一个s3c2410(ARM920T)的启动代码分析的, 但是看来了一下2410的启动代码,发现有些东西还不是理解的很清楚, 我ARM9的经验比较少.所以还是做一个ARM7的启动代码分析吧, 网上那一份相比,我这个主要关注startup.s文件.网上那个startup.s几乎是一笔带过的.红色标记的是源码.SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 0IRQ_STACK_LEGTH EQU 256ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0NoInt EQU 0x80USR32Mode EQU 0x10SVC32Mode EQU 0x13SYS32Mode EQU 0x1fIRQ32Mode EQU 0x12FIQ32Mode EQU 0x11上面几行代码,不用过多分析, 定义几个符号而已, 把EQU想像成C中的#define就可以了. 具体定义的数值,下面的代码用到我再解释.IMPORT __use_no_semihosting_swi上面这一句的作用是在代码中禁用 semihosting 机制. 到底什么是semihostiong这里不多说, 网上有很多. 这里只说明Semihosting主要用来调试, 在release版本的代码中一般是要禁用的.IMPORT FIQ_ExceptionIMPORT __mainIMPORT TargetResetInit上面三行是把要引入的外部标号声明一下,以便下面使用. EXPORT bottom_of_heapEXPORT StackUsrEXPORT ResetEXPORT __user_initial_stackheap上面四行是把要给其它文件使用的标号声明AREA vectors,CODE,READONLYENTRY上面这一行声明汇编文件的入口, 整个文件是从这里开始执行的. ResetLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xb9205f80LDR PC, [PC, #-0xff0]LDR PC, FIQ_Addr上面几行是配置中断向量表. 中断向量表的顺序是不能变的,因为这是ARM7规定的,可以参考相关书籍. 这里有几个问题要说明一下.第一, 关于DCD 0xb9205f80, 按照ARM7的中断向量表分布图, 这个位置是个保留位. 但是究竟为什么要用0xb9205f80这个数值呢.根据周立功的说法, nxp系列的lpc21xx,lpc22xx片子要求"中断向量表中所有数据32位累加和为0,否则程序不能脱机运行", 我在AXD反汇编了一下(如下图),把中断向量表中的8个机器码累加了一下:0xe59ff018*6+0xe51ffff0+0xb9205f80,没错, 结果是零. 但是我遇到一个问题, 就是我在实验中,把0xb9205f80这个数值改成任何值,程序运行都没问题. 头大了, 这个问题待解决中……(希望高手看到了可以指点一二).第二, 关于LDR PC, [PC, #-0xff0]. 这里本应该放IRQ中断的, 为什么是这么一句话. 其实在我blog的其中一篇文章里有提到过这一点.ARM7的三级流水线结构导致了PC指向的是当前指令的后8个字节. 本来IRQ是应该放在0x00000018处的. LDR PC, [PC, #-0xff0]这条语句执行后, PC的当前值就是0x00000018+8-0xff0. 很容易计算出它的结果是0xfffff030. 看一下lpc22xx的手册就知道. 这个地址就是VICVectAddr. 也就是说本来这个地址是应该放IRQ服务程序的入口地址的,但是这个地址被放在了VICVectAddr 这个寄存器里. 英文手册里有一段对VICVectAddr 描述. 看了之后就容易明白是怎么回事了: Vector Address Register. When an IRQ interrupt occurs, the IRQ service routine can read this register and jump to the value readResetAddr DCD ResetInitUndefinedAddr DCD UndefinedSWI_Addr DCD SoftwareInterruptPrefetchAddr DCD PrefetchAbortDataAbortAddr DCD DataAbortNouse DCD 0IRQ_Addr DCD 0FIQ_Addr DCD FIQ_Handler这几行是为上面中断向量表中的中断标号分配内存空间, 也就是它们的执行地址. 一开始我有个疑问, 为什么不直接用LDR PC, ResetInit,还要用DCD中转一下, 后来上网查了一下,才恍然大悟, ldr指令中的地址必须为当前指令地址是4KB范围内, 用DCD中转一下就可以在整个程序空间寻址.UndefinedB UndefinedSoftwareInterruptB SoftwareInterruptPrefetchAbortB PrefetchAbortDataAbortB DataAbortFIQ_HandlerSTMFD SP!, {R0-R3, LR}BL FIQ_ExceptionLDMFD SP!, {R0-R3, LR}SUBS PC, LR, #4这几行不用过多解释, 只是说明上面几个异常如何执行.接上一篇InitStackMOV R0, LR;设置管理模式堆栈MSR CPSR_c, #0xd3LDR SP, StackSvc;设置中断模式堆栈MSR CPSR_c, #0xd2LDR SP, StackIrq;设置快速中断模式堆栈MSR CPSR_c, #0xd1LDR SP, StackFiq;设置中止模式堆栈MSR CPSR_c, #0xd7LDR SP, StackAbt;设置未定义模式堆栈MSR CPSR_c, #0xdbLDR SP, StackUnd;设置系统模式堆栈MSR CPSR_c, #0xdfLDR SP, =StackUsrMOV PC, R0上面是一个子函数, 函数名为InitStack. 顾名思意, 这个函数设置ARM七种工作模式下的堆栈. 关于这一段代码有三点要说.第一, MSR CPSR_c, #0xdf, 这一句把ARM的工作模式设置为系统模式,或者也可以说是用户模式, 因为系统模式与用户模式是共享相同的寄存器组. 用0xdf对CPSR寄存器赋值,就把IRQ中断关闭了(可以查一下CRSR的详细说明), 代码正常执行时处理器是处在用户模式的,所以IRQ中断是不会执行的. 所以,如果用周立功的这个启动代码,当你的程序中需要中断时,要把0xdf改成0x5f. 之前看到很多人在网上说用周立功的ADS工程模板,进不了中断,很多情况下是这个原因.第二, 并不是每一种模式下的堆栈都用设置的, 比如说如果你的程序中不会用到FIQ,就可以不用设置快速中断下的堆栈.第三, 注意LDR SP, =StackUsr这个语句, 其它都是没有=号的, 为什么这个要用等号呢? 这就是LDR伪指令与LDR指令的区别了, LDR SP, =StackUsr是把StackUsr表示的地址装载到sp, LDR SP, StackUnd是把StackUnd表示地址的内容装载到sp,注意下面几句StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4可以看到,没有”=”的标号都已经用DCD初始化了, 而StackUsr到底是什么呢, 它是由下面的语句决定的(startup.s文件)AREA Stacks, DATA, NOINITStackUsr(分散加载文件)STACKS 0x40002000 UNINIT{Startup.o (Stacks)}这样就明白了, StackUsr肯定是0x40000000~0x400020000之间的某个数. 用户模式下的堆栈空间就是它了.ResetInitBL InitStackBL TargetResetInitB __main处理器上电复位后通过中断向量表进入该函数,__main函数主要工作是初始化C的库函数, 并由它进入C的main函数.__user_initial_stackheapLDR r0,=bottom_of_heap; LDR r1,=StackUsrMOV pc,lr__user_initial_stackheap函数是ADS的一个库函数, 如果程序中用到的分散加载文件, 这个函数必须要被实现. 应用程序的栈和heap是在C库函数初始化过程中建立起来的。

可以通过重定向对应的子程序来改变堆栈和heap的位置. 堆栈的地址在分散加载文件里已经指定好,本函数不应该修改它们的值. 用r0,r1分别返回heap和stack的基址. 关于ADS的存储器机制大家可以去网上查更详细的资料.StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4AREA MyStacks, DATA, NOINIT, ALIGN=2SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;Stack spaces for Administration ModeIrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;Stack spaces for Interrupt ReQuest ModeFiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;Stack spaces for Fast Interrupt reQuest ModeAbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;Stack spaces for Suspend ModeUndtStackSpace SPACE UND_STACK_LEGTH * 4 ;Stack spaces for Undefined Mode上面几行代码是为各个模式下的堆栈分配空间. 其中MyStacksA的位置会在分散加载文件中指定.IF :DEF: EN_CRPIF . >= 0x1fcINFO 1,"\nThe data at 0x000001fc must be 0x87654321.\nPlease delete some source before this line."ENDIFCrpDataWHILE . < 0x1fcNOPWENDCrpData1DCD 0x87654321 ;/*When the Data is 为0x87654321,user code be protected. 当此数为0x87654321时,用户程序被保护 */ENDIF上面这几行其实是加密芯片用的, lpc21xx和lpc22xx系列的ARM7,当你的工程选择RelInFlash时, 代码写进flash,芯片也同时被加密, 加密状态下JTAG也读不到芯片, 也不能单步调试, 要解密的话必须要用ISP完全擦除一下. 上面的代码的意思就是在地址0x1fc处放数据0x87654321, 从而实现加密的功能, 但前提是IF :DEF: EN_CRP, 也就是定义了EN_CPP这个宏. 而这个宏是在当选择了RelInFlash时ADS自动定义的. 然后,再说一下0x87654321的问题. LPC2100 系列ARM7微控制器是世界首款可加密的ARM芯片,对其加密的方法是通过用户程序在指定地址上设置规定的数据。

相关文档
最新文档