嵌入式C AVR位填充数组

时间:2014-06-11 17:35:14

标签: c microcontroller avr

任何人都可以帮我一些我需要在数据数组上实现位填充的代码吗?该程序适用于使用GNU C的AVR微控制器(Tiny84A)。

unsigned char datas[3] = {00011111,10000001,00000000}; 

在每组5个中加0,即每隔5个连续1后出现0

因此数据应

00011111,10000001 becomes 00011111 01000000 10000000

我不确定从哪里开始,一个例子会很棒!

1 个答案:

答案 0 :(得分:0)

网上有很多关于位填充的例子(在5 1s后插入0)。不幸的是,其中许多涉及读写字符串0和1。

还有比特流的例子。看起来你需要找到每个例子并将它们组合起来。

您需要扩展您的问题,以解释您所做的更多设计决策。

特别是,您希望输入是在数组而不是流中。您是否希望将输出写入同一阵列?这比写入不同的数组有点棘手。比特流将再次不同。

基本思想是保持计数器在输入和输出流中的位置,并在到达8位结束时适当地加载和写入字节。

unsigned char datas[3] = {00011111,10000001,00000000};    
int in_byte, in_bit, out_byte, out_bit;

void init()
{
    in_byte = 0; in_bit = 0; out_byte = 0; out_bit = 0;
}

int get_bit()
{
    int ret = 0;

    if (datas[in_byte] & 1 << (7 - in_bit))
    {
        ret = 1;
    {

    ++in_bit;
    if (in_bit == 8)
    {
        in_bit = 0;
        ++in_byte;
    }

    return ret;
} 

您必须自己编写void put_bit(int bit),但使用&#34;或&#34; operator |

您还需要创建一个函数来执行最多5次的循环并添加额外的0。请查看Web上的示例。