• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

在单片机的开辟的数组空间最大为多少

hehung 2018-10-10 浏览量:2579
有一个功能要使用很多的数据,开辟一个数组包含的元素是几万个,这样做的话的缺点是什么,会不会造成单片机卡死。有没有什么好的办法来存储大量的临时数据
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 没有上限,只要不超过地址线访问范围,不超出物理存储器尺寸,想多大都可以,操作上和使用几字节的小数组没区别。
    • 发布于 2018-10-10
    • 举报
    • 评论 0
    • 1
    • 0

其他答案 数量:23

  • stm32的单片机是可以做这么大的数组 如果不够还可以外扩ram
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 建议使用外部存储,单单用数组的化,如果数据是变化的,常规操作要放在ram里,就需要占用ram的空间,几万的元素,即便是字符的类型,也需要几十k的容量来保存,是十分消耗ram的。选用单片机的时候就需要ram大一些的片子,一般也比较贵,另外就是外扩ram,实现单片机ram的扩展,或者选用一些外部的flash器件,程序里边使用循环缓冲、缓存等技术来把大数据实现存取。从语法上来说,只要空间够用,数组的大小是没有限制的。但是数组在分配内存的时候需要一个连续的空间,越大的化就越难分配到。
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是有限制得要看寻址大小,大部分情况都够用,如果,数据有规律可以选择压缩下。
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 外扩吧。你存这么多数据,处理时也需要各种临时变量。
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机,因为程序是写入的,一般不存在动态分配,所以你需要根据程序代码、ram空间等等来考虑数组的实际分配,理论上只要物理ram足够,地址空间足够都可以分配到。
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看单片机本身的RAM资源。如果需要很大的,那么外挂吧
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 看数组的大小及单片机的RAM是否足够,一般情况下不会一下子开辟上万个数组这么大的空间。

    可以对数据进行滑窗处理,避免一次用太多的RAM。

    如果真需要如此大空间,就外挂Ram。

    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机内存上限,看看你的 ram 地址空间是多大,全用上就是了,片上不够就外扩

    话说,单片机不是实时处理数据的,一边接受一边处理一边转发出去,或者保存 flash,不行么。

    一下在开辟几万个数据空间,也不会同时用到呀,用的时候取,用完之后数据存起来,ram 反复使用,数据保存到 flash 上就可以呀。


    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机的数组是放在RAM里面的,如果数组定的太大会导致RAM不够用,这种很多数据的建议放到flash里面去缓存或者用外扩的RAM
    • 发布于2018-10-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 几万个元素的数组是有些大了,如果不是非常频繁使用的数据,并且不用修改,可以把数据保存到Flash中,这样只要Flash足够大,可以定义足够大的数据,定义的方法是使用const关键字,如下方法

    const unsigned short T_PCB_Table[T_END] =
    {
    //0x0FAD
    4013 //-55[degrees C]
    ……}
    ​具体实现方法要看不同的编译器略有差异。

    如果数组数据使用非常频繁,并且需要随时修改的话,还是要吧数据妨碍RAM内的,如果片上资源不够,可以考虑外扩RAM。

    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 几万个元素的数组放在单片机内部的空间肯定是不行的,就算你编程的时候这样写unsigned char data[99999]; 在程序编译的时候就会出错。建议你把数据放在外部的存储器里。单片机只建立一个缓冲区就可以。
    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 设置的栈是多大?然后代码中所有的使用的栈空间加起来没超过你过设置的栈空间就可以啊,
    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 主要看你使用的单片机的静态内存是多少啊,你的静态内存大一些,那么你申请的数据空间就大一些咯。若是非常大,建议使用外部存储
    • 发布于2018-10-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 开辟的内存全在ram中,就需要看ram的大小了
    • 发布于2018-10-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种跟你的RAM大小有关系,如果可以尽量用动态分布数字容量
    • 发布于2018-10-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 一般来说不能超过65536空间地址
    • 发布于2018-10-27
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

在单片机的开辟的数组空间最大为多少