
这个是ebss存储空间不够,不是说烧写到FLASH的程序。未定义分配区的变量都是存在ebss里的,你的ebss数据空间有0x258A长,但有效范围RAML4只有0x1000。如果你外扩了RAM的话,可以在cmd文件中将ebss映射到外扩RAM中,应该就可以了
方法有很多, 我最常用的方法是加一个EEPROM, 将数据存放到EEPROM里, 即使断电,数据也不会丢失
如果数据修改非常的频繁, EEPROM也有可能故障, 因为一般的EEPROM的写入次数可能就有100万次 这种情况下我一般会用一个铁电存储器, 比如FM25L16等等, 没有写入次数的限制, 基本上可以无限次数的读写
论坛上看到的比较。这几天刚拿到STM32F4的评估板,STM32F4这次的卖点就是FPU和DSP指令集,关注了挺长时间,这次就想测试一下STM32F4的浮点性能,如果满足就升级自己飞控的架构。本来用STM32F103+28335双核架构,F28335当浮点处理器用,调试起来比较麻烦,所以一直想换了。测试代码就是用的我飞控的算法,全部使用浮点运算,包含姿态和位置两个7阶和9阶的卡尔曼滤波器,包含大量的矩阵运算以及部分导航算法和PID控制器等,还有部分IF和SWITCH包含跳转的判定语句,相比纯算法算是一个比较综合的运算。测试环境:F28335:CCSV33,使用TI优化的数学库,不开优化,程序在RAM里执行。STM32F4:KEILV47,使用ARM优化的数学库,不开优化。测试方法:F28335:在飞控算法入口设置断点,清零CCS的CPU计数器(profile->clock),然后STEPOVER,记录下CPU的计数STM32F4:在飞控算法入口设置断点,记录下Register窗口内算states计数器,然后STEPOVER,记录下新的计数器数值,与之前的数值相减得到CPU计数测试结果:F28335:253359个CPU周期,除以150MHZ,大约是169msSTM32F4:一共285964个周期,除以168MHZ,大约是17ms,比F28335略慢结论就是,对于包含相对较多跳转的综合浮点算法而言,STM32F4似乎并不慢多少。抛开架构因素,从纯浮点运算方面来看的话。STM32F4的FPU加减乘指令VADDF32、VSUBF32、VMULF32都是单周期指令,而除法VDIVF32耗费14个周期。例如:a=a/b;产生的汇编为:0x08000220ED900A00VLDRs0,[r0,#0x00]0x080002244804LDRr0,[pc,#16];@0x080002380x08000226EDD00A00VLDRs1,[r0,#0x00]0x0800022AEE801A20VDIVF32s2,s0,s10x0800022E4803LDRr0,[pc,#12];@0x0800023C0x08000230ED801A00VSTRs2,[r0,#0x00]复制代码F28335:F28335的FPU有加减乘法指令,都是双周期的,由于没有硬件除法指令,F28335这里是用软件模拟的浮点除法,汇编可以看到LCR$div_f32asm字样,需要19个时钟周期。例如:a=ab,产生的汇编为:0087B2E203MOV32-SP[4],R0H0087B4E2AFMOV32R1H,-SP[6],UNCF0087B6E700MPYF32R0H,R1H,R0H0087B87700NOP//需要让流水线等待FPU运算完毕,所以需要NOP0087B9E203MOV32-SP[4],R0H复制代码除法:0087BDE203MOV32-SP[4],R0H0087BFE2AFMOV32R1H,-SP[6],UNCF0087C17640LCR$div_f32asm:52:71$0087C3E203MOV32-SP[4],R0H复制代码结论:可见单从浮点处理器来说,F28335是不如F4的FPU的。但是由于F28335是哈佛架构,有较长的流水线,可以在一个时钟周期里完成读取,运算和存储,所以程序连续运行的话,就比ARM快上许多许多,比如执行一次a=a+b只需要5个时钟周期,但是缺点就是一旦要跳转,就必须清空流水线,如果是for(i=0;i<1000;i++)a=a+b;复制代码这样的运算,速度反而要比ARM慢(测试下来单次是17周期,ARM是14)所以说这就是ARM和DSP不同的地方了。看看这次测试比较,感觉环境还是有一定的问题:1、F28335是在RAM中运行,并且两者都是在仿真器环境中进行运算,还是离线在Flash中跑比较靠谱。2、两者编译平台一个是CCS,一个是KEIL,对通用语句的优化,有待商榷。3、ARM和TI的数学库中,各自支持的运算种类不一样。
保留的设备(不一定仅是内存)一般用于系统内部资源访问、调试、未来扩展和不公开资源,这部分之所以标注为Reserved,是不希望用户使用的,当然有的你用了也没什么效果,但据我所知,更早期的TI DSP在程序访问或者试图读写保留内存时会引起系统故障中断,芯片把你访问保留内存的 *** 作当成你程序跑飞的一种现象来反应。所以说要想稳定地运行芯片,还是要按照数据手册的要求来使用,省得麻烦造成不必要的结果。
以上就是关于TMS320F28335控制彩屏,图片的数据放在程序中,按理说片内FLASH有256K*16位,够用的,可为什么编译不通全部的内容,包括:TMS320F28335控制彩屏,图片的数据放在程序中,按理说片内FLASH有256K*16位,够用的,可为什么编译不通、DSP 如何存储运行过程中的数据啊 、28335编的测速程序怎么校验等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)