1

我想在 C 中实现循环 FIFO 缓冲区。当我在 Google 上搜索代码示例时,我找到了这个链接。我不明白这是否意味着循环FIFO缓冲区的概念已获得专利,每个想要使用它的人都必须有许可证?

最良好的祝愿

4

3 回答 3

4

伊纳尔

不,软件中的 FIFO 没有专利(发明第一个 FIFO 算法时没有软件专利——我不确定确切的日期,但软件专利是 1990 年代的现象,我在 1983 年在 C64 上使用了 FIFO) .

该专利申请的专利是一种硬件芯片,它包含一个FIFO,它具有一定的特性,特别是“在一个总线周期内进行多次传输”。

所以这不是你一般的 16550 UART(每个时钟周期只能进行一次传输)。

通常,您每天编写的许多代码都已获得专利。通常,这不是问题,因为您的公司不在专利所有者的关注范围内。但是当他们决定不再喜欢你的那一天,你就有大麻烦了,除非你能花几亿美元的律师费在法庭上为自己辩护,或者你自己拥有一大堆愚蠢的专利你可以用来反击。

我收集了一些您可能想阅读的文章:

于 2012-03-05T16:26:57.497 回答
0
typedef struct red
{
   int niz[MAX]; 
   int f, r;
} RED;

int insert(RED buf, int info)
 {
 if (isFull(buf)) 
 buf->f = (buf->f + 1) % MAX;
 buf->r = (buf->r + 1) % MAX;
 buf->niz[buf->r] = info;
 return 1; }
于 2016-02-05T09:48:14.630 回答
-1
// circular_queue.cpp : main project file.

#include "stdafx.h"

using namespace System;

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define max 3

int q[10];
int front=0;
int rear=-1;

int main()
{
    int ch;
    void insert();
    void delet();
    void display();
   // clrscr();
    printf("\n Circular Queue operations\n");
    printf("1.insert \n 2.delete \n 3.display \n 4.exit \n");
    while(1)
    {
        printf("Enter your choice:");
        scanf("%d",&ch);
        switch(ch)
        {
        case 1: insert();   break;
        case 2: delet();    break;
        case 3: display();  break;
        case 4:exit(0);
        default:printf("Invalid option\n");
        }
    }

    return 0;
}

void insert()
{
    int x;
    if((front==0&&rear==max-1)||(front>0&&rear==front-1))
        printf("Queue is overflow\n");
    else
    {
        printf("Enter element to be insert:");
        scanf("%d",&x);
        if(rear==max-1&&front>0)
        {
            rear=0;
            q[rear]=x;
        }
        else
        {
            if((front==0&&rear==-1)||(rear!=front-1))
                q[++rear]=x;
        }
    }
}
void  delet()
{
    int a;
    if((front==0)&&(rear==-1))
    {
        printf("Queue is underflow\n");
        getch();
        exit(0);
    }
    if(front==rear)
    {
        a=q[front];
        rear=-1;
        front=0;
    }
    else
        if(front==max-1)
        {
            a=q[front];
            front=0;
        }
        else a=q[front++];
        printf("Deleted element is:%d\n",a);
}

void display()
{
    int i,j;
    if(front==0&&rear==-1)
    {
        printf("Queue is underflow\n");
        getch();
        exit(0);
    }
    if(front>rear)
    {
        for(i=0;i<=rear;i++)
            printf("\t%d",q[i]);
        for(j=front;j<=max-1;j++)
            printf("\t%d",q[j]);
        printf("\n rear is at %d\n",q[rear]);
        printf("\n front is at %d\n",q[front]);
    }
    else
    {
        for(i=front;i<=rear;i++)
        {
            printf("\t%d",q[i]);
        }
        printf("\nrear is at %d\n",q[rear]);
        printf("\nfront is at %d\n",q[front]);
    }
    printf("\n");
}
//getch();
于 2017-05-09T09:33:05.533 回答