如何将.a文件如何将c语言程序导入单片机机中?

嵌入式高速发展的今天,大量的嵌入式设备使用了Arm为核心的芯片。我们会接触到越来越多的嵌入式设备,一个问题油然而生:数量如此巨大的嵌入式设备的安全性如何?目前针对嵌入式安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。今天我们要介绍的是基于Arm 的可信固件Trusted Firmware-A,简称TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。

华清远见开发环境,FS-MP1A平台

本实验基于tf-a-stm32mp-2.2版本,然后添加意法半导体提供的补丁文件。在意法半导体官方的tf-a中移植我们自己的tf-a。

如果之前已经建立了源码目录,并且导入了源码包,即可跳过本小节。


将ST官方补丁文件打到tf-a源码中:

要对TF卡进行烧录,需要先将TF接入到ubuntu系统中。


由上图所示只有“/dev/sdb1”一个分区则需要重新进行分区。

如果显示如下内容,则表示设备已经被挂载,需要卸载掉设备再删除分区。

卸载完成后重新执行删除分区命令


注意:最后-p /dev/sdb参数中的/dev/sdb需要按照实际ubuntu中的tf节点为准,否则可能发生不可预料的后果。

1.4.3 建立自己的平台

导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)

验证开发工具是否安装正确,显示版本信息如下图所示。


2) 增加板级相关文件
进入到tf-a源码目录

执行如下指令编译trusted:

编译成功后,最后显示内容(部分截图)如下:
编译完成后会在上级build/trusted目录得到如下文件:

由于在移植过程中会多次烧写固件并且会导致正常tf-a无法启动,因此推荐使用TF卡启动的方式来验证。
tf-a需要使用trusted 格式的u-boot镜像启动,具体的编译方法可参考《U-boot移植》章节中的“生成Trusted镜像”小节。
将TF接入ubuntu系统后,查看TF卡分区


/dev/sdb为TF卡设备。如果该设备下只有/dev/sdb1一个分区则重新分区。
执行如下指令烧写u-boot:

将拨码开关设置为SD卡启动方式:
将制作好的TF卡插入开发板,上电后会出现如下错误提示:
这个错误产生的原因是电源初始化错误,需重新调整电源相关配置。

1.4.4 调整设备树电源配置
由于官方参考板DK1采用电源管理芯片做电源管理,而FS-MP1A采用分离电路作为电源管理,本例需要将文件中原有电源管理芯片相关内容去掉,增加上固定电源相关内容

1) 去掉原有电源管理内容
DK1参考板电源管理芯片挂在I2C4上,而FS-MP1A并未使用I2C4总线,所以直接将I2C4相关内容完全删除即可。
将文件中i2c4节点相关内容整体删除,删除内容如下:

2) 添加固定电源配置

固定电源配置通常添加在根节点下,在根节点末尾位置添加如下内容(红色字体为需要添加的内容):

重新烧写后启动现象如下:
可以看到现在已经可以启动到u-boot了。

参考原理图可知eMMC使用的是SDMMC2总线,当前所使用的设备树文件中没有SDMMC2的支持,所以需要增加相关内容才能正常驱动eMMC。
由于在使STM32MP1芯片很多管脚为多功能复用管脚,且很多管脚具备同样的功能,所以移植eMMC时需要确认硬件设计是使用的是那些管脚,根据原理图确认后管脚对应关系为:

    重新编译烧写后可以通过ums或者scp的方式更新eMMC中的u-boot即可。具体可参考《通过linux更新eMMC中的u-boot》章节。

.cn )免费下载使用。

12时钟模式(6时钟模型)应该就是MCS51系列中,12个系统时钟为一个机器周期,2个系统时钟为一个状态,即一个机器周期有6个状态。

至于D/A,一般是指PWM输出,HOLTEK A/D Type MCU都带有8bitPWM输出,但HOLTEK PWM特点是其输出频率由系统频率决定(既系统频率选定后,PWM频率也就定了),其占空比对[PWM]寄存器赋值进行控制,不需要占用定时/计数器资源。

34. 采用AT89S51时,出现了按了复位按钮,RAM中数据被修改了。这是怎么回事?注:数据放特殊寄存器之外。
答:是RESET脚复位按钮:一般MCURESET复位,其特殊寄存器会被重新初始化,而通用寄存器值保持不变。

复位按钮是电源复位:那就是MCU上电复位,其特殊寄存器会被初始化,而通用寄存器值是随机数。

35. 将P2.7用来驱动一个NPN三极管,中间串接了一个1K电阻。问题是:当我尝试向P2.7写’1’时,发现管脚只能输出大约0.5V一个电平。这个电路使用妥当么?如何正确使用IO功能?
答:是仿真时遇到问题,烧录芯片后遇到问题?

可以先将P2.7外部电路断开,测量输出电压是否正常。断开后输出电压正常,那就说明P2.7驱动能力不够,不能驱动NPN三极管,应该改用PNP三极管(一般MCU应用中,都采用PNP方式驱动)。断开后输出电压还不正常,那有可能是仿真器(或芯片)已经损坏。

答:你所说PWM是定时/计数器来控制其频率和占空比,要提高频率,必然会降低精度。要提高PWM频率,只能提高系统振荡频率来解决。

37. 汽车电子用单片机是8位多,32位?如何看待单片机汽车电子市场中前景?
答:现今汽车制造也是一个进步很快工业,特别是电子应用于汽车上,令多种新功能以实现。

总来说,汽车电子应用分三部份。

 汽车发动机控制:限速控制,涡轮增压,燃料喷注控制等。
 汽车舒适装置:遥控防盗系统,自动空调系统,影音播放系统,卫星导航系统等。
 汽车操控和制动:刹车防抱死系统(ABS),循迹系统(TCS),防滑系统(ASR),电子稳定系统(ESP)等。

汽车上各系统繁多,且日新月异,故利用何种单片机是依各系统规格,要求不一,但有一样可肯定是该单片机要符工业规格,才能忍受汽车应用恶劣环境,高温,电源干扰,可靠度要求。不同档次汽车其功能配置相对亦有差别,故8位单片机较低阶系统如机械控制,遥控防盗等应该还有空间,但高阶系统如影音、导航及将来无人驾驶,就非一般单片机能实现。

因汽车工业现阶段由欧美日数个大集团所把持,相关汽车电子配件各集团会挑选单片机大厂合作, 故汽车内置电子系统亦由单片机大厂把持,市场只剩外置系统如遥控防盗,影音导航供小厂开发。

答:您是需要三个外部counter需要三个定时器?是三个定时器标志话,可以取这三个定时最基本时基作为timer基础计数,然后以这个时基来计算这三个需要计数标志flag,程序中只需要查询flag是否到,再采取动作。

要3个外部脉冲计数话,这个有一定难度,外部脉冲很频繁,可以考虑外部中断进行,这个方法必须是外部脉冲频率与MCU执行速度有一定数量级差,否则mcu可能无法处理其它程序,一直处理外部中断。

39. 芯片集成技术日益进步今天,单片机集成技术发展也很迅速,传统40引脚基础上,飞利浦公司推出20引脚单片机系列,使很多引脚可以复用,这种复用技术使用实际应用中会不会影响其功能执行?
答:现有很多品牌单片机都有引脚复用功能,不止飞利浦一家,应该说这个方式前几年就已经有了。实际应用中不会影响其功能执行,要注意是,有MCU采用复用引脚话,该引脚会有一些应用上限制,这相应datasheet里面都会有描述,系统规划时候都要予以注意。

答:Delta-Sigma原理一般应用ADC应用中。具体来说,Delta-Sigma ADC工作原理是由差动器、积分器和比较器构成调制器,它们一起构成一个反馈环路。调制器以大大高于模拟输入信号带宽速率运行,提供过采样。模拟输入与反馈信号(误差信号)进行差动 (delta)比较。该比较产生差动输出馈送到积分器(sigma)中。然后将积分器输出馈送到比较器中。比较器输出同时将反馈信号(误差信号)传送到差动器,而自身被馈送到数字滤波器中。这种反馈环路目是使反馈信号(误差信号)趋于零。比较器输出结果就是1/0 流。该流1密度较高,则意味着模拟输入电压较高;反之,0密度较高,则意味着模拟输入电压较低。接着将1/0流馈送到数字滤波器中,该滤波器过采样与抽样,将1/0流从高速率、低精度位流转换成低速率、高精度数字输出。

简而言之,Delta就是差动,Sigma就是积分意思。Delta-Sigma软件测试,我理解应该是软件模拟差动积分过程。具体来说,就是侦测外部输入电压(电流)信号变化,然后软件积分运算,出外部信号随时间变化基本状况。

41. 通常采用什么方法来测试单片机系统可靠性?
答:单片机系统可以分为软件和硬件两个方面,我们要保证单片机系统可靠性就必须从这两方面入手。

首先设计单片机系统时,就应该充分考虑到外部各种各样可能干扰,尽量利用单片机提供一切手段去割断解良外部干扰造成影响。我们以HOLTEK最基本I/O单片机HT48R05A-1为例,它内部提供了看门狗定时器WDT防止单片机内部程序乱跑出错;提供了低电压复位系统LVR,当电压低于某个允许值时,单片机会自动RESET防止芯片被锁死;HOLTEK也提供了最佳外围电路连接方案,最大可能避免外部干扰对芯片影响。

当一个单片机系统设计完成,不同单片机系统产品会有不同测试项目和方法,有一些是必须测试:

 测试单片机软件功能完善性。 这是针对所有单片机系统功能测试,测试软件是否写正确完整。
 上电掉电测试。使用中用户必然会遇到上电和掉电情况,可以进行多次开关电源,测试单片机系统可靠性。

 老化测试。测试长时间工作情况下,单片机系统可靠性。必要话可以放置高温,高压以及强电磁干扰环境下测试。

 ESD和EFT等测试。可以使用各种干扰模拟器来测试单片机系统可靠性。例如使用静电模拟器测试单片机系统抗静电ESD能力;使用突波杂讯模拟器进行快速脉冲抗干扰EFT测试等等。

当然没有此类条件,可以模拟人为使用中,可能发生破坏情况。例如用人体衣服织物故意摩擦单片机系统接触端口,由此测试抗静电能力。用大功率电钻靠近单片机系统工作,由此测试抗电磁干扰能力等。

42. 开发单片机系统时,具体有那些是衡量系统稳定性标准?
答:从工业角度来看,衡量系统稳定性标准有很多,也针对不同产品标准不同。下面我们大概介绍单片机系统最常用标准。

本试验目为测试试件承受直接来自操作者及相对对象所产生之静电放电效应程度。

本试验为验证试件对射频产生器透过空间散射之噪声耐受程度。

本试验目为验证试件之电源线,信号线(控制线)遭受重复出现之快速瞬时丛讯时之耐受程度。

本试验为针对试件操作状态下,承受开关或雷击瞬时之过电压/电流产生突波之耐受程度。

本试验为验证试件对射频产生器透过电源线传导之噪声耐受程度。

脉冲经由耦合注入电源线或控制线所作杂抗扰性试验。

43. 设计软体时,大多单片机都设有看门狗,需要软体适当位置去喂狗,止软体复位和软体进入死循环,如何适当喂狗,即如何精确判定软体运行时间?
答:大多数单片机都有看门狗定时器功能(WDT,Watch Dog Timer)以避免程序跑错。HOLTEK有一款基本I/O型单片机--HT48R05A-1,我们就以它为例做个说明吧。

首先了解一下WDT基本结构,它其实是一个定时器,所谓喂狗是指将此定时器清零。喂狗分为软件和硬件两种方法。软件喂狗就是用指令来清除WDT,即CLR WDT;硬件喂狗就是硬件复位RESET。当定时器溢出时,会造成WDT复位,也就是我们常说看门狗起作用了。程序正常执行时,我们并不希望WDT复位,要看门狗溢出之前使用软件指令喂狗,也就是要计算WDT相隔多久时间会溢出一次。HT48R05A-1WDT溢出时间计算公式是:256*Div*Tclock。其中Div是指wdt预分频数1~128,Tclock是指时钟来源周期。使用内部RC振荡作为WDT时钟来源(RC时钟周期为65us/5V),最大WDT溢出时间为2.1秒。

当我们到了WDT溢出时间Twdt后,一般选择Twdt/2左右时间进行喂狗,以保证看门狗不会溢出,同时喂狗次数不会过多。

软件运行时间是不同运行路线来决定,可以预见软件运行路线,那么可以T=n*T1来计算软件运行时间。n是指运行机器周期数,T1是指机器周期。HOLTEK单片机是RISC结构,大部分指令由一个机器周期组成,只需要知道软件运行了多少条指令,就可以算出运行时间了。HOLTEK编译软件HT-IDE3000中,就有计算运行时间工具。CISC结构单片机,一条指令可以由若干个机器周期组成,那么就需要具体执行指令来计算了。

我们是一家开发数控系统专业厂,利用各种单片机和CPU开发了很多产品,软件开发上也采用了很多通用抗干扰技术,如:软件陷阱、指令允余、看门狗和数字滤波等等,但实际运用中很不可靠,如:经常莫名其妙死机、程序跳段、I/O数据错误等,故障重复性很不确定,也周期性重复。往往用户使用中出现故障,但又无法重现,很让人头痛。反复检查硬件也设查出原因,对软件可靠性很是怀疑。怎么办?
答:防止干扰最有效方法是去除干扰源、隔断干扰路径,但往往很难做到,只能看单片机抗干扰能力够不够强了。单片机干扰最常见现象就是复位;至于程序跑飞,其实也可以用软件陷阱和看门狗将程序拉回到复位状态;单片机软件抗干扰最重要是处理好复位状态。

一般单片机都会有一些标志寄存器,可以用来判断复位原因;另外也可以自己RAM中埋一些标志。每次程序复位时,判断这些标志,可以判断出不同复位原因;还可以不同标志直接跳到相应程序。这样可以使程序运行有连续性,用户使用时会察觉到程序被重新复位过。

可以定时中断里面设置一些暂存器累加,然后加到预先设定值(一个比较长时间),SET标志位,这些动作都中断程序里面。而主程序只需要查询标志位就好了,注意标志位使用后,记清除,还有中断里面时基累加器使后也要记清除。

其实无论您选是还是否,您的代码中都将包含该文件。
该文件的作用是 初始化 内外部 RAM使其清零,另外还初始化SP等。
如果上述提示框您选否,对哪些RAM清零将采用默认的方式。
如果您想改变RAM清零区域(假如希望复位时某些RAM不被清零时会很有用。),您可以选是,这样该文件的一个副本将添加到您的项目,您可以根据需要改写此文件。

其他SP,SAMLL/COMPACT、LARGE模式的重入函数的堆栈和指针的初始化等和RAM的道理是一样的。

关于51单片机启动文件STARTUP.A51的详细说明

我要回帖

更多关于 如何将c语言程序导入单片机 的文章

 

随机推荐