3122|2

9840

帖子

24

TA的资源

版主

楼主
 

C语言实现将一个数组插入到另一个数组的效率问题 [复制链接]

本帖最后由 littleshrimp 于 2015-4-22 16:06 编辑

为了实现某些功能,写了一个小函数,将一个数组插入到另一个数组,试了一下还是很实用的
效率上估计不会高了,就是把数组整体下移,然后再把要插入的数据粘贴到指定位置,
哪位高手还有变态些的方法没?


  1. uint8_t insert_buffer[100];
  2. uint8_t insert_buffer_index = 0;
  3. uint8_t buffer[100];
  4. uint8_t buffer_index = 0;
  5. //将insert_buffer里的数据插入到bufferr的insert_index位置,buffer的数据整体下移,buffer_length表示buffer中的有效数据长度,insert_buffer_length是要插入的数据长度
  6. void insert_array1(uint8_t *buffer,uint32_t buffer_length,uint32_t insert_index,uint8_t *insert_buffer,uint16_t insert_buffer_length)
  7. {
  8.     uint32_t i = buffer_length;
  9.     do
  10.     {
  11.        //将buffer数据向后移动insert_buffer_length个字节
  12.        buffer[i + insert_buffer_length] =  buffer[i];
  13.     }while(i-->insert_index);
  14.     for(i=0;i<insert_buffer_length;i++)
  15.     {
  16.       //将insert_buffer数据复制到buffer指定位置
  17.       buffer[insert_index + i] = insert_buffer[i];
  18.     }
  19. }
  20. int main(void)
  21. {
  22.    uint32_t i;
  23.    //创建30~39的数组
  24.    for(i=0;i<10;i++)
  25.    {
  26.      buffer[buffer_index++] = 30 + i;
  27.    }
  28.    //创建0~10的数组
  29.    for(i=0;i<10;i++)
  30.    {
  31.      insert_buffer[insert_buffer_index++] = i;
  32.    }
  33.    //将insert_buffer从buffer的第2个索引入插入
  34.    insert_array1(buffer,buffer_index,2,insert_buffer,insert_buffer_index);
  35. //  uint32_t len = get_driver(g_buffer);
  36.    asm("nop");
  37. }
复制代码







此帖出自单片机论坛

最新回复

数据不小的话折腾DMA吧,链式DMA。 当然,要搬的数据量很小的话,做循环能普遍接受的手法也就循环消除和并行cpy,注意到你的是uint8_t,可以把大部分数据折腾成uint32_t来搞。  详情 回复 发表于 2015-4-22 16:35
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复
举报

1149

帖子

3

TA的资源

五彩晶圆(初级)

沙发
 
就上面的方法提个建议哈,操作前首先应该要判断下源数组+插入数组是否超过定义的大小!
此帖出自单片机论坛
 
个人签名construction complete!
 

回复

7756

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 
数据不小的话折腾DMA吧,链式DMA。
当然,要搬的数据量很小的话,做循环能普遍接受的手法也就循环消除和并行cpy,注意到你的是uint8_t,可以把大部分数据折腾成uint32_t来搞。
此帖出自单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表