历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2020年01月28日 | PIC单片机之关于超大数组问题

2020-01-28 来源:eefocus

关于超大数组问题:


本实验用的编译器是xc16-gcc.exe,集成开发环境是MPLAB IDE v8.92,当前的编译器配置如下:


-g -Wall -mlarge-code -mlarge-data -Os -fno-ivopts


如下图:

其中这里有一个超大的数组:

这时候编译会有这样的一个错误:

从提示可以知道,这是一个数据超出的错误,但是这里是超出了数据段,而不是说超出了芯片的flash,我们可以这样查看是否超过了flash,去掉这个数组编译看看占用了多少flash,如下:

也就是说占用的flash空间是:81459+7674=89133,但是单片机的flash却是这样的:

所以即是加上数组的35408也是124541并没有超出flash,所以这个错误完全是编译器的问题,从网上收到这个文章:


http://electronics.stackexchange.com/questions/25878/epmp-on-pic24fj128da210


其中有关键的提示:

所以这里增加-mlarge-arrays这个编译命令,如下:

这时候的编译结果如下所示:

从网上找到这个办法:


http://www.microchip.com/forums/m621857.aspx


其中的关键的地方是这样的:

在文件中修改如下:

这时候编译结果如下:

编译成功了,要说明的是,如果数组再增大到一定的程度,如下

这时候又会出现新的错误,本人决定去弄一张更小的图片吧,不要那么大的图片了,所以这个错误将不再深究,错误如下:

从这里看,或许真的是因为溢出flash了


注意:上面只是说明了怎么装数据,并没有说明怎么使用数据,下面的函数给出了一个怎么使用这个数组数据的说明:


void show_photo(unsigned short int StartX, unsigned short int StartY, __prog__ unsigned char *BmpAddress)

{

    __prog__ HEADCOLOR *BmpHeadr;

    unsigned short int Width, Height,Column,row;

    __prog__ unsigned char *BmpData;

    BmpHeadr = (__prog__ HEADCOLOR *)BmpAddress;

    Width = BmpHeadr->w;    //177

    Height = BmpHeadr->h;   //100

    BmpData = (__prog__ unsigned char *)(BmpAddress + sizeof(HEADCOLOR));    //sizeof表示该数组内存的多少 单位是字节 算出像素数据在数组中的偏移

    LCD_SetPos(StartX,StartX+Width-1,StartY,StartY+Height-1);

    for(Column=0;Column    {

        for(row=0;row        {

            Write_Data(*(__prog__ unsigned short int *)BmpData);

            BmpData +=2;

        }

    }

}


一定要注意这时候使用的是__prog__类型,而不是const类型


下面是这个函数的调用方法:


show_photo(0,0,gImage_100X177);


这个数组的定义是这样的:


__prog__ unsigned char gImage_100X177[35408] __attribute__((space(prog)))= { 0X00,0X10,0XB1,0X00,0X64,0X00,0X01,0X1B,

0XDD,0XC6,0XDD,0XC6,0XFE,0XC6,0XFD,0XCE,0XFD,0XCE,0XFE,0XCE,0X1E,0XCF,0X1E,0XCF,

0X1E,0XCF,0X1E,0XCF,0X1E,0XC7,0X1E,0XCF,0X1E,0XCF,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,

0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XD7,0X3E,0XCF,0X3E,0XC7,0X1E,0XC7,

0X1E,0XC7,0X1E,0XC7,0X1E,0XC7,0X3E,0XC7,0X3E,0XC7,0X3E,0XCF,0X3E,0XCF,0X5E,0XCF,

0X5F,0XCF,0X3E,0XCF,0X3E,0XCF,0X3E,0XCF,0X3F,0XCF,0X3E,0XC7,0X3F,0XCF,0X3F,0XCF,

0X3F,0XC7,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,0X5E,0XCF,0X5F,0XCF,0X5F,0XCF,0X5F,0XCF,


现在我们可以看看实验效果了:

推荐阅读

史海拾趣

Cybernetic Micro Systems公司的发展小趣事

为了进一步拓展业务领域,CMS开始寻求跨界合作。他们与一家领先的汽车制造商达成战略合作,共同研发车载智能系统。CMS的芯片技术为车载系统提供了强大的计算能力和数据处理能力,使得车载系统更加智能化、便捷化。这一合作不仅为CMS带来了新的收入来源,也进一步提升了公司的品牌影响力。

长园维安(CYGWAYON)公司的发展小趣事

长园维安自成立以来,始终坚持技术创新为核心竞争力。在早期发展阶段,公司投入大量资源研发新型线路保护元器件,如PPTC、CPTC等。这些产品凭借其卓越的性能和稳定性,迅速在通讯、汽车电子等领域获得广泛应用。通过不断创新,长园维安在电子行业树立了技术领先的形象。

Bias Power公司的发展小趣事

随着全球化进程的加速,Bias Power公司积极寻求国际合作,以拓展更广阔的市场。公司与国际知名电子企业建立了战略合作关系,共同研发新产品,分享技术和市场资源。通过国际合作,Bias Power公司成功打入欧洲、亚洲等多个地区的市场,实现了业务的快速增长。

此外,Bias Power公司还积极参与国际展览和交流活动,展示其最新技术和产品,与全球同行进行深入交流。这些活动不仅提升了公司的知名度,还为公司的进一步发展奠定了坚实基础。

HI Microwave Technology Limited公司的发展小趣事

人才是企业最宝贵的资源。HI Microwave高度重视人才培养和团队建设,通过引进和培养高素质的技术人才和管理人才,不断提升企业的核心竞争力。公司建立了完善的人才激励机制和培训体系,鼓励员工不断学习和创新。同时,公司还注重营造和谐、开放的企业文化氛围,激发员工的积极性和创造力。这些措施为公司的持续发展提供了有力的人才保障和智力支持。

Fascomp公司的发展小趣事

Fascomp公司起源于一间小型的电子产品研发工作室。创始人李明和他的团队在资金紧张、技术条件有限的情况下,坚持自主研发一款高性能的芯片。经过无数次的失败和试验,他们最终成功开发出了一款具有竞争力的芯片,赢得了市场的初步认可。这个过程中,团队成员的坚持和对技术的执着追求成为了公司后续发展的基石。

Ferranti Electric Inc公司的发展小趣事

为了更好地满足全球客户的需求,Ferranti Electric Inc公司积极实施全球化战略。公司不仅在英国本土拥有生产基地和研发中心,还在全球范围内设立了多个分支机构和办事处。通过全球化布局,公司能够更好地了解不同市场的需求和特点,为客户提供更加定制化的产品和服务。同时,公司也积极参与国际竞争和合作,提升其在全球电气行业的影响力。

问答坊 | AI 解惑

发个qtopia编程的要点

最近在做linux+qte 在arm平台上的界面显示,由于周围 几乎没有做 这块的,qt学习起来相当吃力, 这个是qtopia部分一些精华 要点 分析,看后很受启发…

查看全部问答>

DSP破解行业难题

在电子行业中,DSP高速运算适合做图像以及音频压缩以及编解码,但是不适合跑界面,ARM又弥补了这个空缺,因此,在现在的消费和行业用户中,利用DSP压缩以及传输audio以及图片,利用ARM跑界面相互配合是一个很大的方向,有朋友出来讨论下双核的ARM&d ...…

查看全部问答>

现在DSPC2000系列的开发板大概在多少钱一块啊

现在DSPC2000系列的开发板大概在多少钱一块啊,最好本身带USB接口的仿真器。…

查看全部问答>

windows CE 7部署虚拟机出现 TFTP超时

windows CE 7部署虚拟机出现  TFTP超时怎么办?…

查看全部问答>

2440BSP包中LCD驱动sources如何得来

大家好! 断断续续接触CE,今天有遇到一个问题 我用三星原来的BSP自己用PB有生成了一个新的BSP,为什么两个BSP下的LCD驱动中sources这个文件内容不一样呢 (不排除我修改过其他文件,我记不清了),我只是想知道他们为什么不一样了 比如 我自己新生成 ...…

查看全部问答>

PPC2003用的操作系统是ce5还是6啊?

想安装ce5,谁能给个能下的地址?…

查看全部问答>

数据丢失怎么办?

    相信做嵌入式开发的都知道数据的非易失性保存,通常就是Flash,但是通常会有数据的丢失,但是,我一直在考虑到底是什么导致了数据的丢失。在Flash的相关操作,主要是写和擦处,应该说读的时候造成数据丢失的概率要小些,而写和擦处的 ...…

查看全部问答>

请解惑:为何Upgrade没成功

正在学习USB的几个实验,其中的DFU遇到了困难。将DFU程序烧写到开发板,然后使用DFUSe Demonstration将STM32F10xUSBLibUSBLibdemosDevice_Firmware_Upgradeimages 中的joystickmouse.dfu去upgrade CPU,重启运行,正常。但问题 ...…

查看全部问答>

关于28035的SPI

SPI的初始化要做哪些工作?…

查看全部问答>