当前位置:首页 » 编程软件 » EX本文编译器下载

EX本文编译器下载

发布时间: 2022-09-20 13:33:20

① 我最近才开始java 今天下载安装了java jdk 后缀名改成了.java 为什么还是显示的本文文档 隐藏后缀名没问题

1.首先,后缀名为.java并且你只安装了jdk,没有其他编辑软件,的确是只能按文本显示的。你可以右键选择打开方式,选择你想要的程序,然后勾选始终用这程序打开来更改默认编辑软件。
jdk是一个工具包,没有友好的用户界面和一些辅助功能,你可以安装eclipse,netbeans来帮助你开发。这些编译器可以帮助你检查语法错误等功能,做开发必须的。O(∩_∩)O~

2.①直接在运行里敲cmd,然后使用cd C:\java\bin (举例,具体看你Jdk安装路径)转到你jdk的bin目录下.注:如果配置了JAVA_HOME这步可以省略,直接敲cmd就可以下一步了。
②然后输入 java ***.java 就可以编译了。

希望有所帮助。

② 如何修改exlimps默认的版本编译器

渐变编译器平时是隐藏的,只要点图中的渐变条(渐变叠加窗口),即可显现。出现渐变编辑器后,就可以自定义渐变样式了。

③ 如何用C#编写文本编辑器

首先,打开你的开发工具Microsoft visual studio 2005。文件——》新建项目——》项目类型选择visualc#,模板选择windows 应用程序,到此我们已经创建好一个window窗体了!

接着修改窗体的属性,窗体名字修改为EditorForm,窗体的text属性修改为你要的命名。在工具箱了选择MenuStrip控件如图,把菜单拖到窗体去!

usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Text;
usingSystem.Windows.Forms;

namespaceSimpleEditor
{
publicpartialclassEditorForm:Form
{
stringpath=null;

stringisSaved="n";

intinitLenglt=0;

publicEditorForm(stringpath)
{
this.path=path;

InitializeComponent();
}

privatevoid新建NToolStripMenuItem_Click(objectsender,EventArgse)
{

if(this.richTextBox1.TextLength>0&&(isSaved.Equals("n")))
{

if(MessageBox.Show("文件没有保存是否新建文件?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.Yes)
{
this.richTextBox1.Clear();
this.Text="简单的编辑器";
this.initLenglt=richTextBox1.TextLength;
}

}

else
{
this.richTextBox1.Clear();
this.Text="简单的编辑器";
this.initLenglt=richTextBox1.TextLength;
}
}

privatevoid打开OToolStripMenuItem_Click(objectsender,EventArgse)
{
//确定用户选择了文件
if(this.openFileDialog.ShowDialog()==DialogResult.OK)
{
//得到用户选择的文件路径和文件名
path=this.openFileDialog.FileName;

//读取文件内容

this.OpenFile();

}

}


privatevoidOpenFile()
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".txt"))
{
//纯文本文件
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.PlainText);

}

if(extName.ToLower().Equals(".rtf"))
{
this.richTextBox1.LoadFile(path,RichTextBoxStreamType.RichText);
}

this.Text="文本编辑器"+path;


this.isSaved="y";
}

catch(Exceptionex)
{
MessageBox.Show("请选择合适文件,打开失败");
}
}

privatevoid保存SToolStripMenuItem_Click(objectsender,EventArgse)
{
if(string.IsNullOrEmpty(this.path))
{

this.saveFileDialog1.Title="保存为";
if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;

SaveFile();}

}

else
{

stringextNanme=path.Substring(this.path.LastIndexOf("."));
if(extNanme.ToLower().Equals(".txt"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.PlainText);

}

if(extNanme.ToLower().Equals(".rtf"))
{
this.richTextBox1.SaveFile(this.path,RichTextBoxStreamType.RichText);
}
}

this.initLenglt=richTextBox1.TextLength;

}

privatevoidSaveFile()
{
try
{
if(this.saveFileDialog1.FilterIndex==1)
{
//纯文本文件
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.PlainText);

}

if(this.saveFileDialog1.FilterIndex==2)
{
this.richTextBox1.SaveFile(path,RichTextBoxStreamType.RichText);
}

this.Text="文本编辑器"+path;


this.initLenglt=richTextBox1.TextLength;


this.isSaved="y";
}

catch(Exceptionex)
{}}

privatevoid另存为AToolStripMenuItem_Click(objectsender,EventArgse)
{

if(this.saveFileDialog1.ShowDialog()==DialogResult.OK)
{
this.path=this.saveFileDialog1.FileName;

SaveFile();

}
}

privatevoidEditorForm_Load(objectsender,EventArgse)
{
this.剪切TToolStripMenuItem.Enabled=false;
this.复制CToolStripMenuItem.Enabled=false;

if(!string.IsNullOrEmpty(this.path))
{
this.OpenFile();
}
}

privatevoid字体ToolStripMenuItem_Click(objectsender,EventArgse)
{
try
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".txt"))
{
this.SettxtFont();
}

if(extName.ToLower().Equals(".rtf"))
{
this.SetRichtextFont();
}
}

catch(Exceptionex)
{
}
}

privatevoidSettxtFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;

this.richTextBox1.Font=font;
}
}

privatevoidSetRichtextFont()
{
if(this.fontDialog1.ShowDialog()==DialogResult.OK)
{
Fontfont=this.fontDialog1.Font;

this.richTextBox1.SelectionFont=font;
}
}

privatevoid字体颜色ToolStripMenuItem_Click(objectsender,EventArgse)
{
stringextName=this.path.Substring(this.path.LastIndexOf("."));

if(extName.ToLower().Equals(".rtf"))
{
if(this.colorDialog1.ShowDialog()==DialogResult.OK)
{
Colorcolor=this.colorDialog1.Color;

this.richTextBox1.SelectionColor=color;
}
}
}

privatevoid剪切TToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Cut();
}
}

privatevoid粘贴PToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Paste();
}

privatevoid复制CToolStripMenuItem_Click(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.richTextBox1.Copy();
}
}

privatevoidrichTextBox1_SelectionChanged(objectsender,EventArgse)
{
if(richTextBox1.SelectionLength>0)
{
this.剪切TToolStripMenuItem.Enabled=true;

this.复制CToolStripMenuItem.Enabled=true;
}

else
{
this.剪切TToolStripMenuItem.Enabled=false;
this.复制CToolStripMenuItem.Enabled=false;
}
}

privatevoid编辑EToolStripMenuItem_Click(objectsender,EventArgse)
{

}

privatevoid全选AToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.SelectedText.ToString();
}

privatevoid退出XToolStripMenuItem_Click(objectsender,EventArgse)
{
this.Close();
}

privatevoidEditorForm_FormClosing(objectsender,FormClosingEventArgse)
{
if(this.richTextBox1.TextLength>this.initLenglt)
{
if(MessageBox.Show("文件没有保存是否退出?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)==DialogResult.No)
{
e.Cancel=true;
}
}
}

privatevoid关于AToolStripMenuItem_Click(objectsender,EventArgse)
{
AboutBoxaboutbox=newAboutBox();
aboutbox.ShowDialog();
}

privatevoid撤消UToolStripMenuItem_Click(objectsender,EventArgse)
{
this.richTextBox1.Undo();
}


}
}

④ Microsoft VBScript 编译器错误 错误 '800a03ee' 缺少 ')' 怎么办

肯定是 加了单引号 或者加多了 双引号,把左括号 注释掉了,检查下代码

⑤ 求Desmume5210ex模拟器的下载地址...

新版【NDS模拟器】DeSmuME Ver 5.300 Ex:
http://bbs.tgbus.com/forum.php?mod=viewthread&tid=133968

◎9月15日更新◎
动态编译进阶加速;
◎8月24日更新◎
WiFi联机临时取消;
加速编译代码回归;
◎8月21日更新◎
WiFi网络联机改进;
内核代码独家优化;
◎7月12日更新◎
图像和兼容性改进;
◎7月9日更新◎
画质改善功能强化;
◎7月8日更新◎
后备存档功能完善;
◎7月4日更新◎
存档检测识别改进;
◎7月3日更新◎
固件模拟代码优化;
◎7月1日更新◎
话筒模拟功能改进;
◎6月28日更新◎
后备存档功能回归;
◎6月27日更新◎
绝赞跨平台的封装;
◎6月26日更新◎
EX+SP双内核增强;
◎6月23日更新◎
动态编译极限加速;
修正过快出错问题;
音频同步预设调整;
程序兼容优化改进;
◎6月22日更新◎
口袋BW系列优化;
◎5月30日更新◎
内核代码清理优化;
◎5月25日更新◎
图像软件渲染调整;
◎5月24日更新◎
全局运行速率提升;
程序编译优化改进;
控制外设检测改进;
图像渲染全面优化;
解决各类兼容问题;
……………………………

⑥ 如何在各个版本的VC及64位下使用CPUID指令

一、推荐使用__cpuid、__cpuidex等Intrinsics函数

在32位模式下,我们可以使用内嵌汇编来调用cpuid指令。但在64位模式下,VC编译器不支持内嵌汇编。
于是微软提供了Intrinsics函数——编译器会将Intrinsics函数编译为对应的机器指令,而且同时支持32位和64位。
例如CPUID指令的对应Intrinsics函数是——

[cpp] view plain
// http://msdn.microsoft.com/en-us/library/hskdteyh.aspx
void __cpuid(
int CPUInfo[4],
int InfoType
);

void __cpuidex(
int CPUInfo[4],
int InfoType,
int ECXValue
);

__cpuidex函数的InfoType参数是CPUID指令的eax参数,即功能ID。ECXValue参数是CPUID指令的ecx参数,即子功能ID。CPUInfo参数用于接收输出的eax, ebx, ecx, edx这四个寄存器。
早期的CPUID功能只需要一个功能ID参数(eax),这时可以使用__cpuid函数。
后来CPUID的功能越来越强大,一个功能ID参数(eax)参数不够用,于是加了一个子功能ID(ecx)参数,这时应该采用__cpuidex。

二、用条件编译判断VC编译器对Intrinsics函数的支持性(_MSC_VER)

在__cpuid、__cpuidex等Intrinsics函数时,会遇到以下问题——
1.低版本的VC编译器没有intrin.h头文件。【注】:只有VC2005(或更高)才拥有intrin.h,支持__cpuid。
2.低版本的VC编译器不支持__cpuidex。【注】:只有VC2008的部分版本及VS2010(或更高)的intrin.h中才有__cpuidex。

这时可以使用条件编译来判断VC编译器的版本。
_MSC_VER是微软C/C++编译器——cl.exe编译代码时预定义的一个宏,它的值表示cl的版本,它的类型是“int”。例如——
#if _MSC_VER >=1200 // VC++6.0以上
#if _MSC_VER >=1300 // VC2003以上
#if _MSC_VER >=1400 // VC2005以上
#if _MSC_VER >=1500 // VC2008以上
#if _MSC_VER >=1600 // VC2010以上

例如发现_MSC_VER大于等于1400时,我们可以#include <intrin.h>。然后再利用_MSC_VER进一步判断__cpuid、__cpuidex的支持性。

三、用条件编译判断64位模式(_WIN64)

使用_WIN64这个预处理宏可用来判断目标平台是不是64位。
虽然在编译x64平台的程序时,编译器会自动推导出_WIN64。但是Visual Studio的语法高亮不清楚这些,它有可能仍是按32位代码来做语法高亮。所以,建议还是手动在项目的预处理宏中增加_WIN64。

四、32位下用内嵌汇编实现__cpuidex函数

在32位模式下,我们可以使用内嵌汇编来实现__cpuidex函数。代码如下——

[cpp] view plain
void __cpuidex(INT32 CPUInfo[4], INT32 InfoType, INT32 ECXValue)
{
if (NULL==CPUInfo) return;
_asm{
// load. 读取参数到寄存器
mov edi, CPUInfo; // 准备用edi寻址CPUInfo
mov eax, InfoType;
mov ecx, ECXValue;
// CPUID
cpuid;
// save. 将寄存器保存到CPUInfo
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], ecx;
mov [edi+12], edx;
}
}

五、全部代码

全部代码——

[cpp] view plain
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>

#if _MSC_VER >=1400 // VC2005才支持intrin.h
#include <intrin.h> // 所有Intrinsics函数
#endif

char szBuf[64];
INT32 dwBuf[4];

#if defined(_WIN64)
// 64位下不支持内联汇编. 应使用__cpuid、__cpuidex等Intrinsics函数。
#else
#if _MSC_VER < 1600 // VS2010. 据说VC2008 SP1之后才支持__cpuidex
void __cpuidex(INT32 CPUInfo[4], INT32 InfoType, INT32 ECXValue)
{
if (NULL==CPUInfo) return;
_asm{
// load. 读取参数到寄存器
mov edi, CPUInfo; // 准备用edi寻址CPUInfo
mov eax, InfoType;
mov ecx, ECXValue;
// CPUID
cpuid;
// save. 将寄存器保存到CPUInfo
mov [edi], eax;
mov [edi+4], ebx;
mov [edi+8], ecx;
mov [edi+12], edx;
}
}
#endif // #if _MSC_VER < 1600 // VS2010. 据说VC2008 SP1之后才支持__cpuidex

#if _MSC_VER < 1400 // VC2005才支持__cpuid
void __cpuid(INT32 CPUInfo[4], INT32 InfoType)
{
__cpuidex(CPUInfo, InfoType, 0);
}
#endif // #if _MSC_VER < 1400 // VC2005才支持__cpuid

#endif // #if defined(_WIN64)

// 取得CPU厂商(Vendor)
//
// result: 成功时返回字符串的长度(一般为12)。失败时返回0。
// pvendor: 接收厂商信息的字符串缓冲区。至少为13字节。
int cpu_getvendor(char* pvendor)
{
INT32 dwBuf[4];
if (NULL==pvendor) return 0;
// Function 0: Vendor-ID and Largest Standard Function
__cpuid(dwBuf, 0);
// save. 保存到pvendor
*(INT32*)&pvendor[0] = dwBuf[1]; // ebx: 前四个字符
*(INT32*)&pvendor[4] = dwBuf[3]; // edx: 中间四个字符
*(INT32*)&pvendor[8] = dwBuf[2]; // ecx: 最后四个字符
pvendor[12] = '\0';
return 12;
}

// 取得CPU商标(Brand)
//
// result: 成功时返回字符串的长度(一般为48)。失败时返回0。
// pbrand: 接收商标信息的字符串缓冲区。至少为49字节。
int cpu_getbrand(char* pbrand)
{
INT32 dwBuf[4];
if (NULL==pbrand) return 0;
// Function 0x80000000: Largest Extended Function Number
__cpuid(dwBuf, 0x80000000);
if (dwBuf[0] < 0x80000004) return 0;
// Function 80000002h,80000003h,80000004h: Processor Brand String
__cpuid((INT32*)&pbrand[0], 0x80000002); // 前16个字符
__cpuid((INT32*)&pbrand[16], 0x80000003); // 中间16个字符
__cpuid((INT32*)&pbrand[32], 0x80000004); // 最后16个字符
pbrand[48] = '\0';
return 48;
}

int _tmain(int argc, _TCHAR* argv[])
{
//__cpuidex(dwBuf, 0,0);
//__cpuid(dwBuf, 0);
//printf("%.8X\t%.8X\t%.8X\t%.8X\n", dwBuf[0],dwBuf[1],dwBuf[2],dwBuf[3]);

cpu_getvendor(szBuf);
printf("CPU Vendor:\t%s\n", szBuf);

cpu_getbrand(szBuf);
printf("CPU Name:\t%s\n", szBuf);

return 0;
}

六、兼容性说明

VC编译器对32/64位的支持性——
32位:VC6是最早支持编译32位Intrinsics函数的。
64位:VC2005是最早支持编译64位Intrinsics函数的。

本文方法在32位编译器下的兼容性——
__cpuid:兼容VC6(或更高)。
__cpuidex:兼容VC6(或更高)。

本文方法在64位编译器下的兼容性——
__cpuid:兼容VC2005(或更高)。
__cpuidex:兼容VC2010(或更高)。

⑦ 有以下程序,经编译链接后生成可执行文件ex.exe,若运行时输入以下带参数的命令行:ex ab

输出是
6

实际上就是将第一个参数和第三个参数的长度相加后输出。

⑧ 先在大公司用的[软件调试工具]有哪些

LZ好,思创嵌入式开发网(EMBED.8800.ORG) 思创S3C44B0黄金开发板SDT集成开发环境程序开发功略

ARM开发日益流行,大有逐步取代51系列单片机的趋势,为了更好帮助大家掌握ARM开发的相关集成开发环境,思创嵌入式开发团队将利用思创S3C44B0黄金开发板为一个具体的开发平台,详细介绍ARM SDT2.51集成开发环境、IAR集成开发环境、ADS集成开发环境下应用程序开发的具体过程,给众多嵌入式学习的爱好者提供由浅入深的指导。 同时,我们也希望更多的嵌入式学习爱好者加入我们的行列,写出更多更好的文档,为嵌入式系统开发设计在国内的蓬勃发展作出自己的努力! 本文将讲述SDT2.51的详细安装过程、通过思创S3C44B0黄金开发板提供的LEDTEST示例详细讲述SDT下程序编译、调试、运行的具体过程,通过这样一个示例的详细介绍,力图达到抛砖引玉的作用,让刚接触ARM嵌入式开发的爱好者能够在短短的1-2个小时内迅速掌握SDT集成开发黄金的基本应用技巧,而后马上进行相关的项目开发,并在项目开发的过程中不断解决碰到的问题,当然,思创也很欢迎大家通过思创嵌入式开发论坛(embed.8800.org)不断将自己的困惑、疑难、学习心得进行交流,这样,必将极大提高大家的学习效率。 一、 安装SDT2.51 SDT2.51是ARM公司提供的调试ARM内核CPU的一个功能比较强大的集成开发环境,虽 然现在ARM公司不再升级SDT,而转向主推ADS集成开发环境,但是,由于ADS集成开发环境需要昂贵的MULTI-ICE硬件仿真调试器与之配合,因此,对于嵌入式设计的个人用户而言,还是不太现实的一种开发手段。而SDT集成开发环境只需要制作成本低廉的简易JTAG电缆与之配合,无疑对于个人用户来说,这是一种理想的开发模式。其实,思创在发展初期,全套的软件都是利用建议JTAG电缆+SDT实现的。 下面,我们将讲述SDT2.51的安装过程。 点击SDT安装目录下的setup.ext程序,出现如下安装界面: 思创嵌入式开发网(EMBED.8800.ORG) 1思创嵌入式开发网(EMBED.8800.ORG) 一直点击NEXT,采用默认的设置,不用任何其他的修改,最后完成安装。这样,SDT2.51就安装在C:\ARM251下了。 二、 启动SDT2.51 安装完毕后,点击开始?程序?ARM SDT 2.51?ARM PROJECT MANAGER启动SDT项 目管理器: 思创嵌入式开发网(EMBED.8800.ORG) 2思创嵌入式开发网(EMBED.8800.ORG) 将出现如下的窗口: 这样,就可以开始具体的程序开发过程了。 三、创建工程、添加源文件 SDT采用了流行的项目管理源文件的机制,这种风格对于大多数程序开发者都是比较熟悉的。其基本的流程就是“创建一个PROJECT”?“依次将源文件添加到相应的PROJECT中”。 z 创建一个”LedTest”的PROJECT 在SDT2.51集成开发环境中,选取菜单“FILE?NEW?PROJECT”,将出现下图: 几个参数填写如下: TYPE: ARM EXECUTABLE IMAGE PROJECT NAME: LedTest PROJECT DIRECTORY: D:\TEST\LED_Test 然后一直选择OK,就可以出现一个没有任何源文件的项目了,该项目有3种源代码的发布 思创嵌入式开发网(EMBED.8800.ORG) 3思创嵌入式开发网(EMBED.8800.ORG) 方式:Debug、DebugRel、Release。我们一般都使用Debug。 z 编写和添加源文件到项目中 由于SDT2.51的程序编辑器不是很好用,一般建议大家用UltraEdit编写源代码,然后将源 文件添加到项目中。这也是SDT2.51一直一来被人诟病的一个方面。为了我们那些可怜的银子,也只有暂时迁就SDT了^_^ 下面我们将以思创光盘上提供的LED_EXAMPLE目录下LED跑马灯的程序为例,讲述添加文件和编译的过程。 首先将LED_EXMAPLE目录下的*.C / *.h文件以及INC目录(存放一些头文件)拷贝到D:\TEST\LED_TEST目录下,然后在SDT项目管理器中打开D:\TEST\LED_TEST.APJ项目,点击Arm Executable Image目录树中的Debug栏目,将出现下图: 然后,点击选中SOURCE,选择菜单“PROJECT? ADD FILES TO SOURCES”,依次选择当前目录中的C文件和S文件,这样,就将源文件全部加入到了项目中。 四、编译和链接程序 在进行下一步的编译之前,需要着重提到链接过程的几个参数的设置。选择菜单“project?Tool Configuration for "Debug"?armlink?Set”,将出现下图: 思创嵌入式开发网(EMBED.8800.ORG) 4思创嵌入式开发网(EMBED.8800.ORG) z 确保General标签页中的Search Path for Libraries的路径是C:\ARM251\LIB,保证程序链接过程中能够在正确的路径下找到需要的库文件。 z 确保在“ENTRY AND BASE”标前页中的BASE OF IMAGE的设置为: Read-only :0XC1000000 Read-Write:0XC5000000 这样设置的原因是:思创黄金开发板上SYSTEM SDRAM占用的地址空间是0x0C000000-0x0C7FFFFF,具体可以参看《思创S3C44B0黄金开发板资源列表》一文。这样,在调试过程中,SDT的调试数据和命令将通过JTAG电缆下载到开发板上的SYSTEM SDRAM中,进行程序的运行和DEBUG过程。当然,也可以将READ-ONLY的地址设置到FLASH中,即0X00000000。一般我们建议直接在SDRAM中直接运行程序。 思创嵌入式开发网(EMBED.8800.ORG) 5思创嵌入式开发网(EMBED.8800.ORG) 做好这些准备工作后,就可以正式开始程序的编译和链接过程了。首先在ROM窗口中,选中DEBUG,然后选择菜单“PROJECT?FORCE BUILD LEDTEST.APJ DEBUG”,SDT开始编译和链接过程,将出现下图: 可以看到编译和链接没有错误,一个WARNING可以忽略。 五、调试程序 通过前面的介绍,相信大家对SDT下如何创建和编译、链接自己的项目有了很好的了解,接下来,重点将放在如何利用思创提供的WIGGLER JTAG电缆进行SDT下程序的调试过程。 首先,选择菜单“Project?Debug LEDTEST.APJ DEBUG”,将出现下图ARM DEBUGGER窗口: 思创嵌入式开发网(EMBED.8800.ORG) 6思创嵌入式开发网(EMBED.8800.ORG) SDT提供两种放置模式:ARMULATER和ARM REMOTE,后者是真实地利用实际硬件进行ARM 调试过程,前者提供了一种软件模拟ARM调试过程。为了进行真正地ARM硬件仿真,还需要进行一些设置。 在ARM DEBUGGER窗口中,选择菜单“OPTIONS?CONFIGURE DEBUGGER”,出现下图: 在TARGET ENVIRONMENT选项中选择REMOTE A,然后点击下边的CONFIGURE按钮,出现下图: 思创嵌入式开发网(EMBED.8800.ORG) 7思创嵌入式开发网(EMBED.8800.ORG) 在HEARBEAT前面打勾,并且在ETHERNET后面输入127.0.0.1表示本机的IP。之所以要 在此设置网络的地址,我们在《嵌入式系统软件开发指南——移植uClinux到思创S3C44B0黄金开发板》一文的第一节有一详细的阐述。 在做好这些设置后,就可以开始进行目标码的转载了,下图比较清晰地描述了目标码地下载机制,其实这也是各种调试器进行调试的一般机制。 在上位机后台运行的JTAG.EXE程序将SDT2.51各种调试数据和命令的网络数据包转换成符合JTAG标准的计算机并口信号,并通过WIGGLER JTAG电缆下载到思创黄金开发板上。 思创嵌入式开发网(EMBED.8800.ORG) 8思创嵌入式开发网(EMBED.8800.ORG) 具体操作步骤如下: 1. 在上位机的JTAG(即将思创光盘的JTAG目录拷贝到用户具体的目录)目录下,在DOS SHELL直接敲入JTAG命令,将出现如图结果: 表明ARM JTAG已经在运行,等待SDT2.51发送各种调试数据。需要提醒的是:思创提供的JTAG.BAT文件是针对WIN2000的上位机开发环境,如果是WIN98的开发环境,需要修改JTAB.BAT文件,将ALLOWIO 0X378去掉。关于这一问题的具体原理请参见《嵌入式系统软件开发指南——移植uClinux到思创S3C44B0黄金开发板》一文的第一节。 2. 选择菜单“FILE?LOAD IMAGE”,出现下图: 选择LEDTEST.AXF,SDT2.51将开始下载过程,如图: 思创嵌入式开发网(EMBED.8800.ORG) 9思创嵌入式开发网(EMBED.8800.ORG) 这个过程将进行几分钟,具体时间视AXF文件大小而定。最后程序将停在ASM代码的入口处。如图: 现在就可以开始进行仿真了! 选择菜单“EXECUTE”,就可以看到各种DEBUG命令以及相关的快捷键,如按F8就可以开始单步仿真,F5就可以开始全速仿真。 呵呵,这时我们不妨按F5,观察开发板上LED,就可以发现LED的跑马灯程序运行起来了。 将光标停留在44BINIT.S汇编文件的369行,如下图: 思创嵌入式开发网(EMBED.8800.ORG) 10思创嵌入式开发网(EMBED.8800.ORG) 这是MAIN.C程序的入口地址,选择菜单“EXECUTION?RUN TO CURSOR”,然后按F8单步执行,程序将跳转到MAIN.C程序,如图: 思创嵌入式开发网(EMBED.8800.ORG) 11思创嵌入式开发网(EMBED.8800.ORG) 这时,可以开始采用SDT提供的各种调试技巧,如设置断点、全速运行、观察变量、观察寄存器、观察存储器空间等等。具体可以参见SDT提供的一些文档,不再赘述。如果有用户感兴趣,不妨作一些工作,将各种具体的调试技巧一一介绍给大家。 最后,值得提醒大家的一点就是不妨在单步操作的时候观察上位机JTAG窗口的变化情况,如图: 大家可以清楚看到SDT不断向JTAG电缆发出各种操作数据和命令。 小结 ARM开发在如火如荼地进行着,对于思创而言,拿一句流行地话来说,就是“将ARM开发进行到底”,思创将一如既往地恪守在嵌入式开发领域,不断研发和销售优秀的嵌入式开发板和各种工具,同时不断完善各种相关的技术文档。 最后,再次申明,我们是站在前辈们的基础上不断前行,在此,向所有为嵌入式开发提供各种研发工具和资源的前辈们表示敬意。 本文的目录结构参看了龚俊先生的《ARM开发软件使用教程》,在此表示谢意! 思创嵌入式开发网(EMBED.8800.ORG)

1.1 ARM SDT 2.5开发环境简介
一、实验目的
熟悉ARM SDT 2.5开发环境,学会ARM并行口仿真器的使用。使用SDT编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实验内容
本次实验使用ARM SDT 2.5集成开发环境。新建一个简单的工程文件,并编译这个工程文件。学习ARM并行口仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法。
四、实验设备及工具(包括软件调试工具)
硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、Pentium100以上PC机。
软件:PC机操作系统Windows 98、Windows 2000或Windows XP,ARM SDT 2.51或ADS 1.2集成开发环境,仿真器驱动程序、超级终端通信程序。
五、实验步骤
1.建立工程文件
(1)运行ARM SDT 2.5集成开发环境(ARM Project Manager)。选择File|New命令,在对话框中选择Project选项卡,单击“确定”按钮后弹出New Project对话框,如图1-1所示,Type为工程模板类型,这里选择ARM Executable Image,然后输入工程名和所在路径。单击OK按钮后新建一个工程文件。
(2)在新建的工程中,如图1-2所示,选中工程树的“根部”。使用命令Project|Tool Configuration for work1.apj|<asm> = armasm|Set,对整个工程的汇编进行设置。

图1-1 新建一个工程文件 图1-2 对整个工程的汇编进行设置
(3)因为开发板上的嵌入式处理器ARM7TDMI没有浮点处理器,所以,如图1-3所示,在弹出的对话框中设置Floating Point Processor为none,并保持其他的设置不变。
(4)选中工程树的“根部”,通过Project|Tool Configuration for work1.apj|asmlink|Set命令,对整个工程的连接方式进行设置。
(5)在弹出的对话框中,打开Entry and Base选项卡,如图1-4所示,设置连接的Read-Only(只读)和Read-Write(读写)地址。地址0x0c080000是开发板上SDRAM的真实地址,是由系统的硬件决定的;0x0c200000指的是系统可读写的内存地址。也就是说,在0x0c080000~0x0c1fffff之间是只读区域,存放程序的代码段,从0x0c200000开始是程序的数据段。

图1-3 设置Floating Point Processor为none 图1-4 设置连接的地址
提示:用户可以修改这两个数值来决定程序存储区的大小和数据存储区的大小。但应注意SDRAM为8MB,地址范围为0x0c000000~0x0c7fffff。其中0x0c080000之前的空间是留给LCD显示缓存区的。
(6)打开Linker Configuration对话框中的ImageLayout选项卡,如图1-5所示,设置程序的入口模块。指定在生成的代码中,程序是从44binit.s开始运行的,这里填写44binit.s对应的目标文件44binit.o,Init是该汇编文件中的代码段名字。
(7)选择Project|Edit Project Template命令,系统弹出Project Template Editor对话框。在该对话框中可以看到一系列步骤名称。SDT在处理工程文件时是按这些步骤完成的,每个步骤设定了对应的操作,以及该操作的输入、输出和命令行等。读者可以选择已有的步骤,单击Edit按钮打开该步骤设置对话框,观察每个步骤所实现的功能。例如:步骤Compile是把.c和.h文件编译成.o文件的,而步骤Link则就是把.o文件和 .alf文件连接生成.axf文件的。在这些步骤中的设置建议保留默认值。但这里缺少一个从.axf文件生成所需的.bin文件的步骤,所以使用New按钮,为编译器新建一个步骤,如图1-6所示,取名为RomImage。

图1-5 设置程序的入口模块 图1-6 为编译器新建一个步骤
(8)按照如图1-7的内容设置步骤RomImage的内容。使编译器编译的时候可以生成system.bin文件,这就是系统的可执行文件。可以看出该操作的输入是当前工程的.axf文件,所在位置是Image,输出是system.bin,位置在Eprom,操作由fromelf组件完成,命令行是fromelf -nozeropad <$projectname>.axf -bin system.bin。这里的Image和Eprom可以在设置好后的工程窗口中看到。步骤名称和输出位置名称并不要求一致。
提示:在文本框中输入文字后必须单击Add按钮添加到上方列表框中,否则单击OK按钮后该设置信息丢失。
(9)选择Project|Edit Variables for work1.apj命令,系统弹出Edit Variables for work1.apj对话框。列表框中是该工程的一些变量,读者也可以选择某个变量名,在Value文本框中可以看到其值。$ProjectName变量设置的是工程名,可以和工程文件的文件名不一致,Image下的.axf文件将以此命名。这里注意一下变量config$armlink的值,应该是-info.total#total -ro-base#0xc080000 -rw-base#0xc200000 -first#44binit.o(init),和前面对armlink的设置一致。而变量config$asm的值是-fpu#none。这里需要将build_target变量的值设为system.bin,编译器在生成此文件后步骤执行完毕,如图1-8所示。
提示:选择某个变量并更改其值后,必须单击Apply按钮使其生效,如果更改完毕后又选择其他变量,则该设置将无效。

图1-7 设置RomImage的内容 图1-8 设置build_target变量
(10)选中工程树中的DebugRel子树,按Delete键删除。
提示:在系统工程树中Debug子树是应用程序的调试版本,在生成的目标代码中,包含了系统的调试信息。Release子树是应用程序的发行版本,生成的代码中不包括调试信息,而且编译器还针对速度和代码的大小进行优化。DebugRel子树是一个折衷版本,通常用不到,所以,在这里删除。
(11)回到Project Template Editor对话框中,单击Edit Detail按钮,在弹出的对话框中可以重新命名模板,如图1-9所示。重新命名模板后可以保存该工程,并把该空工程(还没有添加工程文件)复制到SDT安装路径下的Template目录下,下次新建工程时可以在New Project对话框中的Type列表框中看到该模板,使用该模板无需重新设置工程参数。
(12)至此,工程文件设置完毕。包括对armlink和armasm的参数设置,新建生成system.bin文件的编译步骤和对应变量。建议将该设置后的工程文件作为模板保存,以方便日后使用。同时注意上文关于操作的提示,以前多数用户建立模板失败的原因可能就在于操作上的失误。
(13)把光盘中SDT实验所在目录中的“1-开发环境实验”下的STARTUP目录复制到工程路径下。如图1-10所示,选中工程树中Debug子树的Sources选项。通过Project|Add Files to Sources命令,把STARTUP目录下的*.S和*.c文件加入到工程中。

图1-9 重新命名模板 图1-10 加入工程的源文件
(14)选中工程树中Debug子树的IncludedFiles选项。通过Project|Add Files to IncludedFiles命令,把STARTUP目录下的所有*.h文件都加入工程中。
(15)在需要用到库文件的工程中,选中工程树中Debug子树的Libraries选项。通过Project|Add Files to Libraries命令,把*.ALF库文件加入工程中。
(16)双击工程树中Debug子树的Sources选项中的main.c,打开main.c文件。下面是Main()函数中的内容,程序向LCD和串口输出字符串“Hello world!”。

int Main(int argc, char **argv)
{
ARMTargetInit();
LCD_Init();
LCD_ChangeMode(DspTxtMode); //转换LCD显示模式为文本显示模式
LCD_Cls(); //文本模式下清屏命令
LCD_printf("Hello world!\n"); //向液晶屏输出
Uart_Printf("\nHello world!\n"); //向串口输出
while(1);
}

读者可以分别打开其他的源文件,了解该系统运行的基本知识。这个程序没有用到操作系统,只是简单地说明工程的开发过程,带有操作系统的实验将在“μC/OS-II在ARM处理器上的移植及编译”实验之后出现。
2.进行程序的在线仿真、调试
(1)回到ARM Project Manager对话框,选中工程树中的Debug子树,通过Project |
Build work1.apj“Debug”命令(或者工具栏中的相应按钮)编译整个工程。
(2)把ARM的JTAG仿真器连接到PC机的并行口和开发板上,打开开发板的电源,运行仿真器的驱动程序UarmJTAG.exe。
(3)使用Project|Debug work1.apj“Debug”命令(或者工具栏中的相应按钮)启动ARM Debugger软件调试程序。
(4)在ARM Debugger中,通过Options|Configure Debugger命令设置仿真器。如 图1-11所示,在弹出的对话框中,设置Target Environment为Remote_A。
(5)单击Configure按钮,按照如图1-12所示,设置仿真器。

图1-11 设置仿真器 图1-12 设置仿真器
(6)出现下面的提示信息以后,单击“是”按钮,ARM Debugger开始通过仿真器装载程序,如图1-13所示。

图1-13 装载程序
注意:第(4)、(5)步设置好后,以后再调试的时候直接进行到第(6)步,不需要再设置。当不能进行第(6)步时,重复第(4)和第(5)步。
(7)装载完毕以后,通过Execute|Go命令(或者工具栏中的相应按钮)运行程序。
(8)当程序运行时,可以使用Execute|Stop命令(或者工具栏中的相应按钮)暂停程序的运行。如图1-14所示,在Execute窗口中将显示出程序暂停的位置。

图1-14 显示程序暂停的位置
(9)通过Execute|Step命令(或者工具栏中的相应按钮)可以单步运行程序。也可以使用Step In、Step Out命令进入或者跳出函数的调用。
(10)在程序停止运行的时候,选择View|Source Files命令,可以打开如图1-15所示的源程序列表窗口,双击列表中的文件名可以查看相应的源文件。
注意:查看源文件时,有时可能会出现看不到自己的源文件的情况,这时要将工程重新强制编译一下。
(11)在源文件列表中打开main.c文件。选择源文件中的某一行,单击鼠标右键,如图1-16所示,用Toggle Breakpoint命令可以设置断点,使程序运行到这里停下来。
(12)使用在View菜单下的Registers、Variables和Memory命令可以查看工作寄存器或者内存变量。读者可以逐一地尝试,为以后调试程序打下基础。

图1-15 查看源文件 图1-16 设置断点 7025希望对你有帮助!

⑨ Linux嵌入式交叉编译工具链问题 浅谈

简介

交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。有时出于减小libc库大小的考虑,也可以用别的c库来代替glibc,例如uClibc、dietlibc和newlib。交叉编译工具链主要包括针对目标系统的编译器gcc、目标系统的二进制工具binutils、目标系统的标准c库glibc和目标系统的Linux内核头文件。第一个步骤就是确定目标平台。每个目标平台都有一个明确的格式,这些信息用于在构建过程中识别要使用的不同工具的正确版本。因此,当在一个特定目标机下运行GCC时,GCC便在目录路径中查找包含该目标规范的应用程序路径。GNU的目标规范格式为CPU-PLATFORM-OS。例如,建立基于ARM平台的交叉工具链,目标平台名为arm-linux-gnu。

交叉编译工具链的制作方法

  1. 分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。

  2. 通过Crosstool脚本工具来实现一次编译生成交叉编译工具链。

  3. 直接通过网上(ftp.arm.kernel.org.uk)下载已经制作好的交叉编译工具链。

方法1相对比较困难,适合想深入学习构建交叉工具链的读者。如果只是想使用交叉工具链,建议使用方法2或方法3构建交叉工具链。方法3的优点不用多说,当然是简单省事,但与此同时该方法有一定的弊端就是局限性太大,因为毕竟是别人构建好的,也就是固定的没有灵活性,所以构建所用的库以及编译器的版本也许并不适合你要编译的程序,同时也许会在使用时出现许多莫名的错误,建议你慎用此方法。


方法1:分步构建交叉编译工具链


  1. 下载所需的源代码包

  2. 建立工作目录

  3. 建立环境变量

  4. 编译、安装Binutils

  5. 获取内核头文件

  6. 编译gcc的辅助编译器

  7. 编译生成glibc库

  8. 编译生成完整的gcc

由于在问答中的篇幅,我不能细述具体的步骤,兴趣的同学请自行阅读开源共创协议的《Linux from scratch》,网址是:linuxfromscratch dot org


方法2:用Crosstool工具构建交叉工具链(推荐)

Crosstool是一组脚本工具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是kegel dot com/crosstool。用Crosstool构建交叉工具链要比上述的分步编译容易得多,并且也方便许多,对于仅仅为了工作需要构建交叉编译工具链的你,建议使用此方法。

运行which makeinfo,如果不能找见该命令,在解压texinfo-4.11.tar.bz2,进入texinfo-4.11目录,执行./configure&&make&&make install完成makeinfo工具的安装

  • 准备文件:

下载所需资源文件linux-2.4.20.tar.gz、binutils-2.19.tar.bz2、gcc-3.3.6.tar.gz、glibc- 2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和gdb-6.5.tar.bz2。然后将这些工具包文件放在新建的$HOME/downloads目录下,最后在$HOME/目录下解压crosstool-0.43.tar.gz,命

令如下:
#cd$HOME/
#tar–xvzfcrosstool-0.43.tar.gz
  • 建立脚本文件

接着需要建立自己的编译脚本,起名为arm.sh,为了简化编写arm.sh,寻找一个最接近的脚本文件demo-arm.sh作为模板,然后将该脚本的内容复制到arm.sh,修改arm.sh脚本,具体操作如下:

# cd crosstool-0.43

# cp demo-arm.sh arm.sh

# vi arm.sh

修改后的arm.sh脚本内容如下:

#!/bin/sh
set-ex
TARBALLS_DIR=$HOME/downloads#定义工具链源码所存放位置。
RESULT_TOP=$HOME/arm-bin#定义工具链的安装目录
exportTARBALLS_DIRRESULT_TOP
GCC_LANGUAGES="c,c++"#定义支持C,C++语言
exportGCC_LANGUAGES
#创建/opt/crosstool目录
mkdir-p$RESULT_TOP
#编译工具链,该过程需要数小时完成。
eval'catarm.datgcc-3.3.6-glibc-2.3.2.dat'shall.sh--notest
echoDone.
  • 建立配置文件

在arm.sh脚本文件中需要注意arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat两个文件,这两个文件是作为Crosstool的编译的配置文件。其中arm.dat文件内容如下,主要用于定义配置文件、定义生成编译工具链的名称以及定义编译选项等。

KERNELCONFIG='pwd'/arm.config#内核的配置
TARGET=arm-linux#编译生成的工具链名称
TARGET_CFLAGS="-O"#编译选项


gcc-3.3.6-glibc-2.3.2.dat文件内容如下,该文件主要定义编译过程中所需要的库以及它定义的版本,如果在编译过程中发现有些库不存在时,Crosstool会自动在相关网站上下载,该工具在这点上相对比较智能,也非常有用。

BINUTILS_DIR=binutils-2.19
GCC_DIR=gcc-3.3.6
GLIBC_DIR=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根据实际情况填写)
GDB_DIR=gdb-6.5
  • 执行脚本

将Crosstool的脚本文件和配置文件准备好之后,开始执行arm.sh脚本来编译交叉编译工具。具体执行命令如下:

#cdcrosstool-0.43
#./arm.sh

经过数小时的漫长编译之后,会在/opt/crosstool目录下生成新的交叉编译工具,其中包括以下内容:

arm-linux-addr2linearm-linux-g++arm-linux-ldarm-linux-size
arm-linux-ararm-linux-gccarm-linux-nmarm-linux-strings
arm-linux-asarm-linux-gcc-3.3.6arm-linux-objarm-linux-strip
arm-linux-c++arm-linux-gccbugarm-linux-objmpfix-embedded-paths
arm-linux-c++filtarm-linux-gcovarm-linux-ranlib
arm-linux-cpparm-linux-gprofarm-linux-readelf
  • 添加环境变量

然后将生成的编译工具链路径添加到环境变量PATH上去,添加的方法是在系统/etc/ bashrc文件的最后添加下面一行,在bashrc文件中添加环境变量

export PATH=/home/jiabing/gcc-3.3.6-glibc-2.3.2/arm-linux-bin/bin:$PATH

至此,arm-linux下的交叉编译工具链已经完成,现在就可以使用arm-linux-gcc来生成试验箱上的程序了!












⑩ excplise 中的 jar包 是静态库还是动态库

都可能有,你看是这个程序需不需要引用了,静态库和动态库都是闭源库,只能拿来满足某个功能的使用,不会暴露内部具体的代码信息,而从github上下载的第三方库大多是开源库。
1、静态库(.lib)
函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.EXE文件)。当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。

2、动态库(.lib文件和.dll文件)
在使用动态库的时候,往往提供两个文件:一个引入库(.lib)文件(也称“导入库文件”)和一个DLL(.dll)文件。虽然引入库的后缀名也是“lib”,但是,动态库的引入库文件和静态库文件有着本质的区别,对一个DLL文件来说,其引入库文件(.lib)包含该DLL导出的函数和变量的符号名,而.dll文件包含该DLL实际的函数和数据。在使用动态库的情况下,在编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并不可复制到可执行文件,直到可执行程序运行时,才去加载所需的DLL,将该DLL映射到进程的地址空间中,然后访问DLL中导出的函数。这时,在发布产品时,除了发布可执行文件以外,同时还需要发布该程序将要调用的动态链接库。

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:626
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:356
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:71
php微信接口教程 发布:2025-04-16 17:07:30 浏览:296
android实现阴影 发布:2025-04-16 16:50:08 浏览:787
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:337
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:202
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:798
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:355
土压缩的本质 发布:2025-04-16 16:13:21 浏览:582