电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

keil与proteus混合编译

22页
  • 卖家[上传人]:汽***
  • 文档编号:479832047
  • 上传时间:2023-03-11
  • 文档格式:DOCX
  • 文档大小:175.51KB
  • / 22 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、|F!rcij亡匚t 训urksp日e找了 N 久终于找到如何在 Keil3 下用汇编语句了,在下初学,见谅.= =#曰“澤 Target 1-、.Source Group 1閱 Startups-基main.c:J IpcZlxx.h :j stdio.h图1.如往常一样建立项目,选择芯片型号,建立main()函数,具体工程文件结构如图,main函数 中的 asmfile 在下图介绍056030406070809Project Workspace-曲 Target 1-、5our匚已 Group 1:釣 Startups -園 main.c:订 Ipc21xx.h 丄stdio.h 闔 new ,5EXPORT asmfileAREA asmfile, CODE, READONLYIMPORT eFunENTRYBL eFunmcvmcvmcv图2. asmfile子程序的头现,并保存为new.s添加到项目中,该子程序中调用了 main.c中的int cFun(int a,int b,int c)函数,需用IMPORT cFun来说明。注意不要顶格写(否则编译会提示四条 错误信息,n

      2、ew.s(2): error: A1163E: Unknown opcode asmfile , expecting opcode or Macronew.s(4): error: A1163E: Unknown opcode asmfile, , expecting opcode or Macronew.s(6): error: A1163E: Unknown opcode cFun , expecting opcode or Macronew.s(9): error: A1355U: A Label was found which was in no AREA)assembling newslinkingtest.axf: Harning: L6305U: Image does not have an entry point. (Not specified or not set due to multiple choices.) test.axf: Uarning: L6318U: main.o(text) contains branch to a non-code symbol

      3、asmfile.Program Size: Code=1156 R0-data=16 RW-data=O ZI-data=1256rrtest- 0 Error (s) , 3 Warning(s)Iil Ra lilfl L 厂cmrri nC 口ir* UildL /I I 4图 3.如果正常,编译通过Project Workspace .整-Q Target 1-、.5ource Group 1團 Startups-main.cIpcZlxi.h::r| stdio.h 蛊 new.sint main(void)asttif ile ().;return ;图 4.Debug 可见 RO,R1,R2 改变为 0x0000000b,0x00000016,0x00000021(即十进制的11,22,33)一 Current01#include lpc2lxx hA# include R00x0000000bR10k00000016E20x00000021R30x0000042dR40x40000010R50x40000000R60x00000000FL70x00000000R80x0

      4、0000000R90x00000000R100x00000494RU0x00000000R120x000001c4R13(SPj0x40000458R14边:0x00000468R15(FC)0x00000lb4V:=lLuh070809extern void asitifile ();int cFun(int a, int b,intmain(void)asinf ile ();int c)a- CFSR0x40000010亩 SPSR0x00000000Vser/S.-Fast Et.return 0;19lilt err up tSupervi sor图 5. 最后可以看见整个工程的文件结构如图以下给出new.s和main.c的代码;new.s,添加进去的时候注意不要顶格了。这里是csdn的排版问题,请在Keil3中自行调 整。EXPORT asmfileAREA asmfile, CODE, READONLYIMPORT cFunENTRYmov r0, #11mov r1, #22mov r2, #33BL cFunEND/main.c #include #include _

      5、asm void nop()mov R0,#1int cFun(int a, int b, int c)return a + b + c;extern void asmfile();int main(void)nop();asmfile();return 0;本 文 来 自 CSDN 博 客 , 转 载 请 标 明 出 处http:/ C语言与汇编语言混合编程贴子发表于:2009/2/19 16:41:04文章来看 proteus 仿真网 C语言中嵌入汇编1、在C文件中要嵌入汇编代码片以如下方式加入汇编代码:#pragma ASM;Assembler Code Here#pragma ENDASM2、在Project窗口中包含汇编代码的C文件上右键,选择“Options for .”,点 击右边的“ Generate Assembler SRC File”和“Assemble SRC File”,使检查框由灰色变成黑色(有效)状态;3、根据选择的编译模式,把相应的库文件(如Small模式时,是 KeilC51LibC51S.Lib)加入工程中,该文件必须作为工程的最后文件;4、编译,即

      6、可生成目标代码。来个实例吧:# i nclude vreg51.hvoid main(void)P2=1;#pragma asmMOV R7,#10DEL:MOV R6,#20DJNZ R6,$DJNZ R7,DEL#pragma endasmP2=0;2. 无参数传递的函数调用C51调用汇编函数1无参数传递的函数调用先来个例子:其中example.c和example.a51为项目中的两个文件KL* KL* KL* KL*T* *T* *T* *T* *T* *T* *T* *T* *T* *T* 叫、叫、叫、叫、叫、叫、*T* *T* *T* *T* *T* *T*example.c彳、彳、彳、彳、tY* *T*彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、彳、iy*彳、彳、彳、彳、彳、彳、*T*extern void delay100();main()delay100;彳、彳、彳、彳、tY* *T*彳、彳、彳、彳、彳、彳、彳、彳、彳、iy*KL* KL*J *J *J *J 彳、彳、彳、彳、彳、彳、?PR?DELAY100 SEGMENT CO

      7、DE; /在程序存储区中定义段PUBLIC DELAY100;声明函数RSEG ?PR?DELAY100; 函数可被连接器放置在任何地方DELAY100:MOV R7,#10DEL:MOV R6,#20DJNZ R6,$DJNZ R7,DELRETEND在example.c文件中,先声明外部函数,然后直接在main中调用即可。在 example.a51 中,?PR?DELAY100 SEGMENT CODE;作用是在程序存储区中定义段,DELAY100为段名,?PR?表示段位于程序存储区内PUBLIC DELAY100;作用是声明函数为公共函数RSEG ?PR?DELAY100;名的属性表示函数可被连接器放置在任何地方,RSEG是段段名的开头为PR,是为了和C51内部命名转换兼容,命名转换规律如下:CODE ?PR?XDATA?XDDATA?DTBIT?BIPDATA?PD3. 有参数传递的函数调用记住哦,c文件和A51文件不能使用同一个文件名,不过我还不知道为 什么会这样,有高手知道得话请告知。今天说说带参数传递的函数调用,在C51和汇编之间传递参数的方式 有两种,一种是通过寄存器传

      8、递参数,C51中不同类型的实参会存入相应的寄存 器,在汇编中只需对相应寄存器进行操作,即达到传递参数的目的。不同类型的数据及其传递参数的寄存器如下表所示:在C和汇编混合编程的时候,存在C语言和汇编语言的变量以及函数的接口 问题。在C程序中定义的变量,编译为.asm文件后,都被放进了.bss区,而且变量名的 前面都带了一个下划线。在C程序中定义的函数,编译后在函数名前也带了一 个下划线。例如:extern int num 就会变成 .bss _num, 1extern float nums5 就会变成.bss _nums, 5extern void func ()就会变成 _func,一 汇编和C的相互调用可以分以下几种情况:(1) 汇编程序中访问c程序中的变量和函数。在汇编程序中,用_XX就可以访问C中的变量XX 了。访问数组时,可以用_xx+ 偏移量来访问,如_XX+3访问了数组中的XX3。在汇编程序调用C函数时,如果没有参数传递,直接用_funcname就可以了。 如果有参数传递,则函数中最左边的一个参数由寄存器A给出,其他的参数按 顺序由堆栈给出。返回值是返回到A寄存器或者由A寄存器给出的地址。同时 注意,为了能够让汇编语言 能访问到C语言中定义的变量和函数,他们必须声 明为外部变量,即加extern前缀。(2) c程序中访问汇编程序中的变量如果需要在c程序中访问汇编程序中的变量,则汇编程序中的变量名必须以下划 线为首字符,并用global使之成为全局变量。如果需要在c程序中调用汇编程序中的过程,则过程名必须以下划线为首字符, 并且,要根据c程序编译时使用的模式是stack-based model还是regist

      《keil与proteus混合编译》由会员汽***分享,可在线阅读,更多相关《keil与proteus混合编译》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.