【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试

由于TinyCLR的相关代码与硬件无关,我们所做的就是根据实际需要,添加不同的Feature,此外就是合理配置 堆栈和代码存储位置。其主要工作,具体地来说就是搞定\Solutions\STM3210E\TinyCLR目录下的TinyCLR.proj和 scatterfile_tinyclr_mdk.xml文件。

TinyCLR.proj文件和NativeSample.proj的内容类似,不过额外要添加一些由托管代码(C#)写好的库,比较重 要的就是mscorlib.pe,它是TinyCLR的核心文件,大小大概29k。这里也许读者会奇怪,它的扩展名为什么是pe而 不是windows系统上的dll,其实.Net Micro Framework的托管代码编译和桌面版的没有什么不同,用的都是VS2008 环境中的Csc.exe,我们的MF程序所引用的Program Files\Microsoft .NET Micro Framework\v4.0\Assemblies目 录下的库(扩展名为dll的文件),其实就是由Csc.exe编译而成的,它和.Net Framework没有任何本质区别,可直 接在彼此的工程中互为引用。换句话说dll文件是给我们在PC上编译.Net Micro Framework时用的,而pe文件才是 真正下载到硬件平台给我们的嵌入式系统用的文件。

那pe文件和dll文件又是什么关系呢?其实pe文件是Program Files\Microsoft .NET Micro Framework\v4.0 \Tools \MetaDataProcessor.exe对dll再编译(更确切的说是删减和处理)后的文件,其大小大概为原dll文件的 一半,如mscorlib.dll文件为85.8k,而mscorlib.pe文件为29k。我们的TinyCLR就是这些pe文件的执行引擎(更详 尽的内容我将在以后准备写的【玩转.Net MF】系列文章中介绍pe文件的相关知识)。

我们说过,由于EM-STM3210E开发板的RAM太小,所以我们一开始就得要调试Flash版本的TinyCLR,由于TinyCLR 在创建程序集实例时,定义了一个与程序集同样大小的数组,所以我们的栈至少要大于我们我所要加载的最大的pe 文件,比如至少要大于29k。堆是给托管代码的对象用的,可以根据实际需要定义大小,针对EM-STM3210E开发板 scatterfile_tinyclr_mdk.xml的最终配置如下:

<If Name="TARGETLOCATION" In="FLASH">
         <!-- 120k -->
         <Set Name="Heap_Begin"          Value="0x68000000"/>
          <Set Name="Heap_End"            Value="0x6801DFFC"/>
         <!-- 8k -->
          <Set Name="Custom_Heap_Begin"   Value="0x6801E000"/>
         <Set Name="Custom_Heap_End"     Value="0x6801FFFC"/>
          <!-- 32k -->
          <Set Name="Stack_Bottom"        Value="0x20008000"/>
          <Set Name="Stack_Top"           Value="0x2000FFFC"/>

         <Set Name="Code_BaseAddress"    Value="0x08000000"/>
         <Set Name="Code_Size"           Value="0x00080000"/>

         <Set Name="Config_BaseAddress" Value="0x00000000"/>
         <Set Name="Config_Size"         Value="0x00020000"/>

         <Set Name="Deploy_BaseAddress" Value="0x00020000"/>
         <Set Name="Valid"               Value="true"/>
     </If>

其中Config是放在NandFlash上的。

时间: 2024-09-22 01:15:23

【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试的相关文章

【.Net Micro Framework PortingKit – 09】串口驱动

虽然在PC机中,串口渐行渐远,但是在嵌入式领域,串口仍可以说是如日中天,因为它造价低廉.并且编程也比较方便,在没有显示屏或输入设备的系统上,串口更是不可或缺,和超级终端一道,共同解决了信息显示和输入问题. 经过这几天的努力,在Cortex-M3平台上的.Net Micro Framework的NativeSample移植工作就要一个段落了,目前已实现启动代码.SRAM.时钟(RCC).中断(NVIC).SysTick.GPIO.串口.NandFlash(FMSC)等相关功能,这些代码可以说是使T

【.Net Micro Framework PortingKit–10】世界首款Cortex-M3内核MFV4诞生

目前在Cortex-M3平台上最常见的嵌入式操作系统就是UCOSII了,除此之外可支持的主流嵌入式操作系统就难以见到了,这是因为Cortex- M3主频较低(常见72M),不支持MMU,片内Flash和片内RAM都比较小等等,这几点限制,就使诸如WINCE系统.嵌入式Linux等需要 MMU支持的系统无法进行移植,而不需要MMU支持的ucLinux目前也难以见到.不过现在好了,.Net Micro Framework V4从今天起,已正式步入Cortex-M3平台可支持的嵌入式系统行列了. 我们

【.Net Micro Framework PortingKit – 15】移植总结(兼谈MF未来发展)

从元旦开始,便利用业余时间从事基于Cortex-M3内核上的.Net Micro Framework的移植工作.虽然到现在算起来有一个多月的时间,但是我平日的正常工作时间大部分都花在和同事一起做WiFi驱动的开发上了,除去写这一系列文章的用时,真正在Cortex-M3内核上移植时间最多也就十几天.这并不说明我在嵌入式方面的功底多么深厚,虽说我PC平台上的软件开发时间有十几年的历史,但是做真正嵌入式的开发才是最近一两年的时间(以前虽说开发过PLC程序和WinCE平台上的组态软件,但充其量仅仅算是嵌

【.Net Micro Framework PortingKit – 13】LCD驱动开发

LCD驱动其实对TinyCLR并无必要,特别是在EM-STM3210E开发板上,因为该开发板上的内存太小了,片内64K,片外扩展了128K,加起来也不过172K,而我们知道针对320*240的显示大小,16bit的位图所占的大小就是150K,很显然.Net Micro Framework所提供的图形库如不加修改是很难正常运行的,不过对我们来说在LCD屏幕上显示文字信息也是值得期待的,如果修改一下图形库,在LCD 上画个线.画个圆和显示个位图也绝不成问题. 和我们以前开发的驱动相比,LCD的驱动开

【.Net Micro Framework PortingKit – 12】SysTick驱动开发

SysTick驱动对TinyCLR来说非常重要,.Net Micro Framework系统的多线程和多任务(对托管代码来说是单任务多线程,但是还存在和托管代码同时运行的任务,如我们用MFDeploy程序Ping TinyCLR或擦写Flash 的时候,就是另外的任务在执行)就是靠它来实现的. SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持:二是获得系统当前Tick,以此实现延时等待,比如我们常见的Events_WaitForEvents函数就靠它来实现延时功能的:三是为Na

【.Net Micro Framework PortingKit – 11】NandFlash驱动开发

对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区,分别为: 1.BLOCKTYPE_BOOTSTRAP(存放启动代码,一般为TinyBooter) 2.BLOCKTYPE_CONFIG(配置区,存放配置信息) 3.BLOCKTYPE_CODE(本地代码区,指TinyCLR代码) 4.BLOCKTYPE_DEPLOYMENT(托管代码区,存放用户的C#程序) 5.BLOCKTYPE_STORAGE_A(用户数据存储区)

【.Net Micro Framework PortingKit

要点亮LED灯或获得输入IO的状态应该是比较容易的,打开端口时钟,然后读写相关的GPIO寄存器就可以了,但是要实现一个输入中断,就要费些周折了. 对STM32(Cortex-M3)的芯片,要实现一个GPIO中断一般需要如下几步: 1.配置时钟控制器寄存器(RCC)的APB2RSTR,确保对应的GPIOA ~ GPIOG时钟使能. 2.对GPIO寄存器的CRL(或CRH)要设置正确的输入模式,如浮空输入模式(对接收IO中断来说,当然要设置成输入模式). 3.要通过AFIO寄存器配置中断的输入来源,

【转】 .Net Micro Framework 快速入门

   .Net Micro Framework 快速入门 收藏  一.简介   Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0.2009年11月 V4.0.2010年5月 V4.1 beta,2009年并入.NET产品组,Digi.Atmel.飞思卡尔等半导体公司都先后为其推出了开发板,该技术可以应用到远程控制.智能家电.教育类机器.医疗电子

PHP开发框架Yii Framework教程(14) UI 组件 MaskedTextField示例

CMaskedTextField为格式输入框,可以为文本框指定Mask限制用户可以出入的文本格式,如本例使用99.99.9999 ,可以只允 许输入类似日期的文本. 修改View,添加CMaskedTextField 组件 <?php $this->widget ('CMaskedTextField',array( 'model'=>$model, 'attribute'=>'date', 'name'=>'date', 'mask'=>'99.99.9999', 'h