MCU灵活软件包启动文件说明.docx
现在很多MCU都配套有软件包,不再像以前那样从零(汇编、寄存器)开始了。而本文给大家描述的瑞萨MCU也是通过灵活软件包(FSP)进行快速初始化外设,下面就给大家讲讲FSP灵活软件包那些重要的内容。FSP介绍FSP:F1.exib1.eSoftwarePackage,即瑞萨MCU的软件包,类似于Kei1.MDK中需要安装的软件包(Kei1.STM32F1xx,DFP.2.4.0.pack).瑞萨灵活软件包(FSP)是一个灵活配置的软件包,旨在提供易于使用、可扩展、高质量的嵌入式系统设计软件.它适用于RA系列的MCU,提供了统一直观的API,并有详细的解释和例程应用,可以按照客户不同的需求自动生成相应驱动程序.启动文件说明启动文件是程序上电发位后执行的第一个程序。它一般包括如下几个:1.初始化堆栈2.使能FPU3.定位中断向*友九配置系统时钟5.启HC0RTEX-M33栈篇视器6.初始化。语言运行环境7.初始化变量SysiomCoreC1.ock.这个变量存放的是处理潺时钟的频率8.初始化用于触发NY1.C中断的E1.C(事件琏按控制)9.BSP初始化初始化堆栈初始化堆栈1、栈区(Stack)一种喉序数据结构,满足后进先出原则.由陶译器自动分配择放,存放函数的参数值,局部变量的值等。栈特别方便用来保存/恢g调用现场.在函数被调用时,其参数也会被压入发起调用的进程栈中,并待到调用结束后,函数的返回值也会被存放回栈中,如果函数调用时,如果函数参数和局部变St较多,寄存器放不下,则需要适当增加栈区的大小。2、堆区(heap)通常由程序员手动分配,使用ma1.1.oc和free进行分配和择放.注意,使用完需及时择放(free),否则容易造成内存泄漏。3、c2Studio中堆栈的设JK宏"BSP一CFG_STACK_MAIN_BYTES"可以在FSPConfiguration的mBSPoW性栏中的"RACOmmOn"中通过修改"Mainstacksize”设置,默认为IKB(0x400Byte)宏"BSPFG_HEAP_BYTES"可以在FSPConfiguration的"BSP"帐性栏中的"RACommon”中通过修改“Heapsize”设置,/认为IKB(OX400Byte).如下图所示.*Prob1.emsOComo1.eProperties×9SmartBroWWfCSrnartM4nu1.ar<*Detug三CMate<nWyMCK-RA6T2SettingsPropertyVdIUeOFSIrcgntrrFtingt>BkxkProtectionSettings(BPS)>Pcffnam(BkxkProtectionSettings(PSPS)S1.AftupC<MheUneSize22ByteTFUMath1.ibEnab1.edM4inCXciIIdtorWaitTime8163cyc1.etvRACommonM>nU(ksize0x400幡的大小Hwpwe(byte)(MOOG的大小MCUVymV)3300Prme<efcheckingErwb1.edAWeHFapReturnFSPJRR.ASSfRDONError1.ogNoError1.ogCkxkRrgkt¼notRcw<V1.cduringSudUPDtMbkdMainOi1.Ut<xPopu1.atedRopuUtedPFSProtectEfwb1.edCRuntimeEnab1.edEjrtyBSPInitia1.izationDitabMMnCXciItotorC1.ockSourceCryUiIocRewnatorSubctockPopuUtrdNotPopuMtcdSubckx1.cDrZ(Df1.ve(4pMiUfe*3UtyvariesbyMCU)Ssn(IarWN(Mrna1.modeSutxiockSUMZitkmTime(m)1000堆栈区的大小设置g_main_stack和g_heap分别代表主枝和堆区的数组后面还有属性修饰,"BSP_P1.ACE_IN_SECTION(BSP_SECTI(M_STACK)",宏展开后为“_attribute_(section(".stack")_attribute_(_used_)"“BSP_P1.ACE_IN-SECTION(BSP_SECT1.ON_HEAP)”,宏展开后为“_attribute_(sectio11(".heap")_attribute_(_used_)”其修饰属性解理如下:_attribute_J(SeCtIoM.叁数名"):可以将变量定义到指定的输入段"参数名"中.attribute.(used.):参数"used”告诉编译器,这个变班会被使用,即使在编许器优化时没有被显式地调用.这个同性可以防止编译监将未使用的函数或变量优化掉,确保它们在程序中存在.堆极区数组属性修饰代码中的"BSP_AuGN_VARIAB1.E(8SP_$TACK_AUGNMENT)”,宏展开后为、_attribute_(a1.igned(8)".代表堆栈区在分配时,会按照8字节对齐方式进行.attribute_(weak);用户可以在用户文件中正新定义一个同名函数.最终编译器编译的时候,会选择用户定义的函数.如果用户没有重新定义这个函数,那么编译器就会执行-Weak声明的函数,并且编译器不会报错,所以我们可以在别的地方定义一个相同名字的函数。该函数不能在同一个C文件中.函数属性宏定义中断向量表定义一个中断向量指针数组一Vectors6,将此表放入到.fixed_VeCtOrS”的输入段中.中断向量表定义入口程序系统上电或复位后直接执行入口函数Reset_Hand1.er(),包括两个函数:SyStem1.nit()和main().SyStem1.nit()主要是用BSP对系统进行初始化,随后通过main函数进入用户代码.BSP负责使MCU从复位状态进入到用户的应用程序。在到达用户的应用程序之前,BSP设苴堆栈、时钟、中断、C语言运行环境和堆栈监视器.M.'-9AS13ruti,:4b«XVJUIOfte.>1.tinS>tutpCintZisX1.¥A1.1.4c1.y.QvoidMaset9Mand1.ar(void)1.n1.1.1.1.>yatvausingB5P./f7tmXnKf>1C4X1u*rafUc4tio<./M1.n()jwi1.(1)(ytntin1.t*/入口函数调用系统初始化/SMICoMexM15fi,i0IXMHt*tt*W*uw11<<vi>3oaFo-1<.mv'xifAJM.*t,ezrtv*nri:Nt>>Mmav.1.vit«4B-*w'1.*em'w'一,一.m»4iWM»DWwa/UK-MMM'ZM>-4M*»初始化处理If时”频率R.k1.R.MgE"-CX3Ia1.AcS<mc*kc1.WJfeuie>2_tIOrA<»i1)dif1f»5»_cro_rrs,r»oTicTIf卬TZ5t11ZW:1.:>I1.<BJCFOJQ,3SDCUHEiX>E”K-,n_rtij»:->mr»3-w«wr.io.rwrt.rrsw.orrwr1f1.HM3K>>MN0<nt3scmt>iv«w.xjmjrs«_cry5CT,Md1.f/三ft*rae1.KnfC->KM".E3-VHVTt*-RXrIRMFte91.trF0tctCah1.(AS/MAffc>TKT3三<fftfB1.Jh.MKWB.WBWK.MF.>m*1.tyMK(,«»4&rI1.BSJHm53fJ*KVW5MyIWTCIrW始化E1.C事件It发NV1.C中断/像行得定BSPK初始化.设有的话am为空.系统函数初始化内存函数分配通过e2studio打开MemoryUsage,可以看到各段的定义.名称.起止地址,占用容敬大小、对齐方式等。也可以通过打开工程文件夹be2studioDebug*.map文件.这里对常用的段名做个说明I.bss通常是指用来存放程序中未初始化的或者初始值为。的全局变量的一块内存区域,BSS是英文B1.ockStartedbySymbo1.的简称。BSS段属于静态内存分配。.data,数据段(datasegment)通常是指用来存放程序中已初始化的全同变量的一块内存区域,数据段属于蟀态内存分配。码段:代码段(codesegmentte×tsegment)通常是指用未存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就己经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量例如字符串常盘等.内存函数分配