欢迎来到天天文库
浏览记录
ID:51588257
大小:441.50 KB
页数:40页
时间:2020-03-24
《单片机 _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
此文档下载收益归作者所有