当前位置: 首页 > news >正文

整个网站都在下雪特效怎么做seo做的不好的网站

整个网站都在下雪特效怎么做,seo做的不好的网站,asp网站显示建设中,西安网页设计多少钱设计背景 任务是在ZYNQ的PS上使用裸机运行lwIP协议栈使用TCP把PL端通过AXI DMA传来的将近100K采样率的ADC数据发送出去,但由于数据带宽很大,有853.3mbps,所以在每一次AXI DMA简单传输结束后,lwIP未必有足够的发送buffer立即把数据…

设计背景

       任务是在ZYNQ的PS上使用裸机运行lwIP协议栈使用TCP把PL端通过AXI DMA传来的将近100K采样率的ADC数据发送出去,但由于数据带宽很大,有853.3mbps,所以在每一次AXI DMA简单传输结束后,lwIP未必有足够的发送buffer立即把数据发送走,如果是发送完再进行下一次简单传输的思路,则会很大地限制了整个系统的带宽,一个简单的思路是每次传输完成后判断发送buffer是否足够,如果不够,先把数据放进软件FIFO里,等待有buffer时再发出去,如果足够的话,则进行发送,当然必须优先发送FIFO里的数据,而后马上进行下一次简单传输,下面是软件FIFO的代码部分。

软件FIFO代码

       1,FIFO结构体定义如下:

typedef struct {unsigned int *data;int head;int tail;int size;int capacity;int size_max;
} FIFO;

​ data存放FIFO数据放置的地址指针,head头用于读,tail尾用于写,size表示了当前FIFO存放的等待发送出去的数据包的组数(我这里的数据包是8次简单传输的数据量,大家可以根据自己需求定,并不是字节数!!!),capacity是整个FIFO的容量,size_max用于记录FIFO的一定时间间隔内的数组组数的最大值(前期调试用)。

       2,初始化部分如下:

// 初始化FIFO
void sending_fifo_init(FIFO *fifo, int capacity)
{
//    fifo->data = (unsigned int *)malloc(capacity * MY_TCP_SEND_BUFSIZE);
//    if (!fifo->data) {
//        perror("Failed to allocate memory for FIFO");
//        exit(EXIT_FAILURE);
//    }fifo->data = (unsigned int *)SEND_FIFO_BASE;fifo->head = 0;		//头部fifo->tail = 0;		//尾部fifo->size = 0;		//当前数据大小fifo->size_max = 0;	//每个时间间隔size最大值fifo->capacity = capacity;		//总容量if(capacity > FIFO_SIZE_MAX){fifo->capacity = FIFO_SIZE_MAX;   }else{fifo->capacity = capacity;}}

       这里需要注意的是没有采用malloc去动态分配内存,这主要是因为在ZYNQ这样的嵌入式设备特别是跑裸机时,这样分配很容易报错。

       3,与size相关的函数

​       一是检查FIFO是否已满,1为满,0为不满。

bool fifo_is_full(FIFO *fifo)
{return fifo->size == fifo->capacity;
}

       二是检查FIFO是否为空,1为空,0为不空。

bool fifo_is_empty(FIFO *fifo)
{return fifo->size == 0;
}

       更灵活的,也给出直接获取size用于打印以及其他辅助调试。

int fifo_get_size(FIFO *fifo)
{return fifo->size;
}

       由于我是每5s打印一次这个时间段的带宽,在调试阶段也想看看FIFO的使用情况,就有了以下的记录fifo最大值的函数,然后在每次打印报告时给最大size清零。

void fifo_record_max_size(FIFO *fifo)
{int size_current = fifo_get_size(fifo);if (size_current > fifo->size_max){fifo->size_max = size_current;}}

       4,整个FIFO部分最重要的部分就是入队与出队的操作,入队代码如下:

bool fifo_enqueue(FIFO *fifo,char *lwip_array_ptr)
{if (fifo_is_full(fifo)) {printf("FIFO is full, cannot enqueue\r\n");return;}memcpy((fifo->data + fifo->tail * MY_TCP_SEND_BUFSIZE / 4), lwip_array_ptr, MY_TCP_SEND_BUFSIZE);fifo->tail = (fifo->tail + 1) % fifo->capacity;  // 循环队列处理fifo->size++;fifo_record_max_size(fifo);}

       首先入队必须要保证FIFO是不为满的,其次是在使用memcpy函数拷贝数据时,注意第一个参数的结果是个什么类型,从而保证每组数据之间是在内存上连续的,不清楚的话,可以先按自己的理解给一个递进制,直接debug看看再进行修改。整个FIFO的运行逻辑是充分利用开辟出来的内存,做一个循环队列处理,而不是size = x的数据放在固定的位置。

​       出队同理:

// 出队操作
bool fifo_dequeue(FIFO *fifo,char *lwip_array_ptr)
{if (fifo_is_empty(fifo)) {printf("FIFO is empty, cannot dequeue\r\n");return false;}memcpy(lwip_array_ptr, (fifo->data + fifo->head * MY_TCP_SEND_BUFSIZE / 4), MY_TCP_SEND_BUFSIZE);fifo->head = (fifo->head + 1) % fifo->capacity;  // 循环队列处理fifo->size--;return true;}

​       5,后面如果FIFO不用了,可以进行销毁:

// 销毁FIFO
void fifo_destroy(FIFO *fifo)
{free(fifo->data);fifo->data = NULL;fifo->head = fifo->tail = fifo->size = fifo->capacity = 0;
}
http://www.yayakq.cn/news/927596/

相关文章:

  • 推广普通话标语东莞seo建站排名
  • 重庆做网站建设公司哪家好国外网站国内做好还是国外做
  • wordpress网站地图生成插件wordpress悬浮音乐播放器插件
  • 温州市城乡建设厅网站中能建西北城市建设门户网站
  • 工信部网站域名备案做自媒体小视频哪个网站比较赚钱
  • 在线免费域名网站解析wordpress手机图片站
  • 广东省建设注册中心网站什么是网络营销评价
  • 西安专业做网站的选服务好的佛山网站建设
  • 网站实用性软件工程导论
  • 网站免费建站系统 六服务器如何发布网站
  • 外网代理服务器网站网站开发阶段流程
  • 网站设计欣赏导航云南省建设工作网站
  • 网站怎样制作网站正在建设中的图片
  • 达濠市政建设有限公司网站电商网站开发建设
  • 常用的网站开发语言网站建设方式优化
  • 浙江省建设监理协会管网站公众号怎么发文章
  • 河南郑州创建网站公司做损坏文档的网站
  • win7做网站著名展厅设计案例
  • php网站开发实国外效果图网站
  • wordpress photolux公司优化是什么意思?
  • 企业网站建设分析wordpress 网址全部变成ip
  • 快速网站备案房屋在线设计平台
  • 怎么做网站例如京东用asp做网站上网帮助
  • 桂林本地网站专门做进口产品的网站6
  • 织梦可以做哪些类型型网站微信卖水果小程序
  • 做网站一定要正版系统吗网页期末作业代码模板
  • dw用ps切片做网站app引流推广方法
  • 做网站编辑有前途珠海建设公司网站
  • 东莞网站建设方案维护石家庄专业网站制作公司
  • asp.net网站制作步骤如何下载别人网站模板