单片机 _c与汇编混合编程.ppt

单片机 _c与汇编混合编程.ppt

ID:51588257

大小:441.50 KB

页数:40页

时间:2020-03-24

单片机 _c与汇编混合编程.ppt_第1页
单片机 _c与汇编混合编程.ppt_第2页
单片机 _c与汇编混合编程.ppt_第3页
单片机 _c与汇编混合编程.ppt_第4页
单片机 _c与汇编混合编程.ppt_第5页
资源描述:

《单片机 _c与汇编混合编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C和ASM的混合编程jianghq2003-5TsinghuaDEE《单片机与嵌入式系统》Content程序的结构汇编程序C程序project框架如何改写汇编程序?在C程序中如何做一些底层操作?存储空间结构程序的结构汇编程序结构C程序结构M30624FGFPMemoryMap几个主要的参数RAM区ramTOPramENDROM区progTOPVvector汇编程序结构-段类型RAM->DATAROM->CODEROMDATA汇编程序结构-段定义.SECTIONmemory,DATA;数据段.ORGVramTOP.SECTIONprog,CODE;代码段

2、.ORGVprogTOP.SECTIONval_vect,ROMDATA;用户自定义中断向量段.ORGVintbase.SECTIONinter,ROMDATA;固定中断向量段.ORGVvector+(8*4)汇编程序中几个主要的参数VramTOP.EQU000400HVramEND.EQU002BFFHVIstack.EQU002C00H-》ISPVprogTOP.EQU0F0000HVintbase.EQU0FA000HVvector.EQU0FFFDCHSB_base.EQU000380H-》SB关于SB和FB.SBSB_base.SBSYMre

3、cv_nums告诉编译器使用该变量的指令寻址方式采用相对基址寻址方式,可以提高生成代码的效率。关于堆栈两种堆栈:堆栈指针ISP和USP使用何种堆栈,由堆栈指针选择标志位(U标志)选取。U=0选取中断堆栈指针ISPU=1选取用户堆栈指针USP响应中断后,该标志清0,执行中断子程序SP指针位置如何设定:栈顶指针Push:SP=SP–1Pop:SP=SP+1C程序结构RAM->DATA->databssstackheapROM->CODE->programROMDATA->romvectorfvectorNC编译器对Section的处理Section的属性属

4、性:I(是否初值),N/F(扩展区)S(SB寻址区),E/O(偶地址对齐)举例:bss_SE,bss_NE,data_FE,data_SEIdata_SEbss_SEdata_SObss_SOdata_NEbss_NEdata_NObss_NOstackheapdata_FEbss_FEdata_FOdata_FEC程序中所有的section列表DATArom_NErom_NOrom_FErom_FOdata_SEIdata_SOIdata_NEIdata_NOIdata_FEIdata_FOIvectorfvectorROMDATACODEprogr

5、aminterruptprogram_S根据芯片修改sect30.inc注释掉不存在的段最重要的三个段的位置设定.sectiondata_SE,DATA.org400H.sectionrom_FE,ROMDATA.org0C0000H.sectionvector,ROMDATA.orgVECTOR_ADRVECTOR_ADR.equ0FA000H其他的段就交给编译器来处理例子:一个Section分配的结果C程序结构-project可能包括多个asm文件,C文件如何安排project的结构?程序的入口首先要清楚整个程序的执行过程从哪里开始执行?Start

6、up文件sect30.inc文件;fixedvectorsection.org0fffdch…………NMI:.lworddummy_intRESET:.lwordstart.endStartup文件ncrt0.a30文件.glbstart.sectioninterruptstart:;---------------------------------------------------------------------;afterreset,thisprogramwillstart;----------------------------------

7、-----------------------------------ldc#istack_top,isp;setistackpointerncrt0.a30设定单片机工作模式RAM清0变量初值设定堆初始化调用全局Init子程序调用全局Main子程序exit循环启动过程主C程序VoidInit(){……}VoidMain(){}主C文件:init(){int1();int2();int3();……}main(){sub1();sub4();……}Project层次框架Startup文件:ncrt0.a30系统提供的库程序:#include“stdlib

8、.h”ASM子程序:init1();sub1()C子程序1:init2();sub2();su

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。