我是靠谱客的博主 从容胡萝卜,最近开发中收集的这篇文章主要介绍c语言并行化,C语言实现串行数据转化为并行数据,有什么好的算法吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如题,有16个字节的数据,一个数据对应一个IO口,从IO口输出相应的高低电平,总共有16个IO口,并且需要并行从STM32的一个16位的口比如PA口输出,所以首先需要做串行数据转化为并行数据,把这16个8位的数据转为8个16位数据。

我现在的程序如下:

unsigned char in_data[16];

unsigned int out_data[8];

out_data[0] |= (0x80 & in_data[15])<<8;

out_data[0] |= (0x80 & in_data[14])<<7;

out_data[0] |= (0x80 & in_data[13])<<6;

out_data[0] |= (0x80 & in_data[12])<<5;

out_data[0] |= (0x80 & in_data[11])<<4;

out_data[0] |= (0x80 & in_data[10])<<3;

out_data[0] |= (0x80 & in_data[9])<<2;

out_data[0] |= (0x80 & in_data[8])<<1;

out_data[0] |= (0x80 & in_data[7]);

out_data[0] |= (0x80 & in_data[6])>>1;

out_data[0] |= (0x80 & in_data[5])>>2;

out_data[0] |= (0x80 & in_data[4])>>3;

out_data[0] |= (0x80 & in_data[3])>>4;

out_data[0] |= (0x80 & in_data[2])>>5;

out_data[0] |= (0x80 & in_data[1])>>6;

out_data[0] |= (0x80 & in_data[0])>>7;

out_data[1] |= (0x40 & in_data[15])<<9;

out_data[1] |= (0x40 & in_data[14])<<8;

out_data[1] |= (0x40 & in_data[13])<<7;

out_data[1] |= (0x40 & in_data[12])<<6;

out_data[1] |= (0x40 & in_data[11])<<5;

out_data[1] |= (0x40 & in_data[10])<<4;

out_data[1] |= (0x40 & in_data[9])<<3;

out_data[1] |= (0x40 & in_data[8])<<2;

out_data[1] |= (0x40 & in_data[7])<<1;

out_data[1] |= (0x40 & in_data[6]);

out_data[1] |= (0x40 & in_data[5])>>1;

out_data[1] |= (0x40 & in_data[4])>>2;

out_data[1] |= (0x40 & in_data[3])>>3;

out_data[1] |= (0x40 & in_data[2])>>4;

out_data[1] |= (0x40 & in_data[1])>>5;

out_data[1] |= (0x40 & in_data[0])>>6;

out_data[2] |= (0x20 & in_data[15])<<10;

out_data[2] |= (0x20 & in_data[14])<<9;

out_data[2] |= (0x20 & in_data[13])<<8;

out_data[2] |= (0x20 & in_data[12])<<7;

out_data[2] |= (0x20 & in_data[11])<<6;

out_data[2] |= (0x20 & in_data[10])<<5;

out_data[2] |= (0x20 & in_data[9])<<4;

out_data[2] |= (0x20 & in_data[8])<<3;

out_data[2] |= (0x20 & in_data[7])<<2;

out_data[2] |= (0x20 & in_data[6])<<1;

out_data[2] |= (0x20 & in_data[5]);

out_data[2] |= (0x20 & in_data[4])>>1;

out_data[2] |= (0x20 & in_data[3])>>2 ;

out_data[2] |= (0x20 & in_data[2])>>3 ;

out_data[2] |= (0x20 & in_data[1])>>4 ;

out_data[2] |= (0x20 & in_data[0])>>5 ;

out_data[3] |= (0x10 & in_data[15])<<11;

out_data[3] |= (0x10 & in_data[14])<<10;

out_data[3] |= (0x10 & in_data[13])<<9;

out_data[3] |= (0x10 & in_data[12])<<8;

out_data[3] |= (0x10 & in_data[11])<<7;

out_data[3] |= (0x10 & in_data[10])<<6;

out_data[3] |= (0x10 & in_data[9])<<5;

out_data[3] |= (0x10 & in_data[8])<<4;

out_data[3] |= (0x10 & in_data[7])<<3;

out_data[3] |= (0x10 & in_data[6])<<2;

out_data[3] |= (0x10 & in_data[5])<<1;

out_data[3] |= (0x10 & in_data[4]);

out_data[3] |= (0x10 & in_data[3])>>1;

out_data[3] |= (0x10 & in_data[2])>>2;

out_data[3] |= (0x10 & in_data[1])>>3;

out_data[3] |= (0x10 & in_data[0])>>4;

out_data[4] |= (0x08 & in_data[15])<<12;

out_data[4] |= (0x08 & in_data[14])<<11;

out_data[4] |= (0x08 & in_data[13])<<10;

out_data[4] |= (0x08 & in_data[12])<<9;

out_data[4] |= (0x08 & in_data[11])<<8;

out_data[4] |= (0x08 & in_data[10])<<7;

out_data[4] |= (0x08 & in_data[9])<<6;

out_data[4] |= (0x08 & in_data[8])<<5;

out_data[4] |= (0x08 & in_data[7])<<4;

out_data[4] |= (0x08 & in_data[6])<<3;

out_data[4] |= (0x08 & in_data[5])<<2;

out_data[4] |= (0x08 & in_data[4])<<1;

out_data[4] |= (0x08 & in_data[3]);

out_data[4] |= (0x08 & in_data[2])>>1;

out_data[4] |= (0x08 & in_data[1])>>2;

out_data[4] |= (0x08 & in_data[0])>>3;

out_data[5] |= (0x04 & in_data[15])<<13;

out_data[5] |= (0x04 & in_data[14])<<12;

out_data[5] |= (0x04 & in_data[13])<<11;

out_data[5] |= (0x04 & in_data[12])<<10;

out_data[5] |= (0x04 & in_data[11])<<9;

out_data[5] |= (0x04 & in_data[10])<<8;

out_data[5] |= (0x04 & in_data[9])<<7;

out_data[5] |= (0x04 & in_data[8])<<6;

out_data[5] |= (0x04 & in_data[7])<<5;

out_data[5] |= (0x04 & in_data[6])<<4;

out_data[5] |= (0x04 & in_data[5])<<3;

out_data[5] |= (0x04 & in_data[4])<<2;

out_data[5] |= (0x04 & in_data[3])<<1;

out_data[5] |= (0x04 & in_data[2]);

out_data[5] |= (0x04 & in_data[1])>>1;

out_data[5] |= (0x04 & in_data[0])>>2;

out_data[6] |= (0x02 & in_data[15])<<14;

out_data[6] |= (0x02 & in_data[14])<<13;

out_data[6] |= (0x02 & in_data[13])<<12;

out_data[6] |= (0x02 & in_data[12])<<11;

out_data[6] |= (0x02 & in_data[11])<<10;

out_data[6] |= (0x02 & in_data[10])<<9;

out_data[6] |= (0x02 & in_data[9])<<8;

out_data[6] |= (0x02 & in_data[8])<<7;

out_data[6] |= (0x02 & in_data[7])<<6;

out_data[6] |= (0x02 & in_data[6])<<5;

out_data[6] |= (0x02 & in_data[5])<<4;

out_data[6] |= (0x02 & in_data[4])<<3;

out_data[6] |= (0x02 & in_data[3])<<2;

out_data[6] |= (0x02 & in_data[2])<<1;

out_data[6] |= (0x02 & in_data[1]);

out_data[6] |= (0x02 & in_data[0])>>1;

out_data[7] |= (0x01 & in_data[15])<<15;

out_data[7] |= (0x01 & in_data[14])<<14;

out_data[7] |= (0x01 & in_data[13])<<13;

out_data[7] |= (0x01 & in_data[12])<<12;

out_data[7] |= (0x01 & in_data[11])<<11;

out_data[7] |= (0x01 & in_data[10])<<10;

out_data[7] |= (0x01 & in_data[9])<<9;

out_data[7] |= (0x01 & in_data[8])<<8;

out_data[7] |= (0x01 & in_data[7])<<7;

out_data[7] |= (0x01 & in_data[6])<<6;

out_data[7] |= (0x01 & in_data[5])<<5;

out_data[7] |= (0x01 & in_data[4])<<4;

out_data[7] |= (0x01 & in_data[3])<<3;

out_data[7] |= (0x01 & in_data[2])<<2;

out_data[7] |= (0x01 & in_data[1])<<1;

out_data[7] |= (0x01 & in_data[0]);

由于有多组这样的数据,转化时占用CPU时间比较多,看一下大家有没什么更好的算法?能压缩这个转化的时间。

最后

以上就是从容胡萝卜为你收集整理的c语言并行化,C语言实现串行数据转化为并行数据,有什么好的算法吗?的全部内容,希望文章能够帮你解决c语言并行化,C语言实现串行数据转化为并行数据,有什么好的算法吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部