关注+星标公众号,不错过精彩内容
转自 | 大橙子疯嵌入式
软件开发中,每次需求的变更基本都需要改写代码,而代码变更后就需要进行功能测试,当然在功能测试之前需要代码的单元测试,避免代码改动后部分场景没有验证,最后出现各种问题。
【资料图】
分享正文之前推荐一个嵌入式招聘信息的平台:
常用的C语言测试框架有:
Unity示例
这里介绍Unity,其他的大家感兴趣可以自行查阅,不同的单元测试框架适用于不同的开发需求和场景。开发人员可以按照自己的项目要求选择最适合的框架。
Unity最小可以只用到几个文件即可完成,把Unity源码目录下的unity.c
、unity.h
、unity_internals.h
三个文件复制至我们的工程目录下进行编译即可,然后在测试文件代码中包含unity.h
简单的示例完成功能函数的验证
#include #include"unity.h"voidsetUp(){//这里可以放置每个测试用例运行前的初始化代码}voidtearDown(){//这里可以放置每个测试用例运行后的清理代码}intAdd(inta,intb){returna+b;}voidtest_AddFun(void){TEST_ASSERT_EQUAL_UINT(6,Add(1,5));TEST_ASSERT_EQUAL_UINT(4,Add(-1,5));TEST_ASSERT_EQUAL_UINT(-6,Add(-1,-5));}intmain(){UNITY_BEGIN();//启动测试RUN_TEST(test_AddFun);UNITY_END();//结束测试return0;}
通过串口或终端打印内容为:
C:\test/test.c:47:test_AddFun:PASS-----------------------1Tests0Failures0IgnoredOK
其中,unity_internals.h
文件中可以修改输出终端,即UNITY_OUTPUT_CHAR
宏的定义
/*-------------------------------------------------------*OutputMethod:stdout(DEFAULT)*-------------------------------------------------------*/#ifndefUNITY_OUTPUT_CHAR/*Defaulttousingputchar,whichisdefinedinstdio.h*/#include #defineUNITY_OUTPUT_CHAR(a)(void)putchar(a)#else/*Ifdefinedassomethingelse,makesurewedeclareitheresoit"sreadyforuse*/#ifdefUNITY_OUTPUT_CHAR_HEADER_DECLARATIONexternvoidUNITY_OUTPUT_CHAR_HEADER_DECLARATION;#endif#endif
其中自定义实现的C语言扩展库(cot)的容器功能函数都已通过Unity添加了对应的单元测试用例,链接:
轻量级通用扩展库
旨在打造一个C语言的通用扩展库。
介绍
支持多种容器实现,包括通用队列(包括不定长队列)、栈、双向链表和动态数组功能
支持定义序列化/反序列化的结构体功能
移植了部分 C++ Boost库中的PP库功能
软件架构
目录说明
├─cot│ ├─include│ │ ├─container // 容器实现头文件│ │ ├─preprocessor // 移植Boost库中的PP库头文件│ │ └─serialize // 序列化/反序列化实现头文件│ └─src│ ├─container // 容器实现源文件│ └─serialize // 序列化/反序列化实现源文件├─test│ ├─container // 容器实现测试代码│ └─serialize // 序列化/反序列化测试代码└─unity // 单元测试框架代码
使用说明
容器类功能使用说明
双向链表使用方式demo
int main(){ cotList_t list; cotListItem_t nodeBuf[10]; cotList_Init(&list, nodeBuf, 10); int data1 = 10; int data2 = 20; int data3 = 30; // 头部增加元素 cotList_PushFront(&list, &data1); // 尾部增加元素 cotList_PushBack(&list, &data2); // 插入元素 cotList_Insert(&list, cotList_End(&list), &data3); // 使用迭代器遍历所有元素 for_list_each(item, list) { printf(" = %d\n", *item_ptr(int, item)); } // 移除指定元素 cotList_Remove(&list, &data3); // 根据添加移除元素 cotList_RemoveIf(&list, OnRemoveCondition); cotList_t list2; cotListItem_t nodeBuf2[3]; cotList_Init(&list2, nodeBuf2, 3); // 链表内存交换 cotList_Swap(&list1, &list2); return 0;}
动态数组使用方式demo
int main(){ uint8_t buf[20]; cotVector_t vector; cotVector_Init(&vector, buf, sizeof(buf), sizeof(uint32_t)); // 在尾部追加元素 uint32_t data = 42; cotVector_Push(&vector, &data); data = 56; cotVector_Push(&vector, &data); data = 984; cotVector_Push(&vector, &data); // 插入元素 uint32_t arrdata[2] = {125, 656}; cotVector_InsertN(&vector, 2, &arrdata, 2); // 删除两个元素 cotVector_RemoveN(&vector, 1, 2); // 根据添加删除元素 cotVector_RemoveIf(&vector, OnVectorRemoveCondition); // 打印数组中的数据内容 for (int i = 0; i < cotVector_Size(&vector); i++) { printf("%02x ", cotVector_Data(&vector)[i]); } return 0;}
双向队列(定长FIFO)使用方式demo
int main(){ uint8_t buf[10]; cotQueue_t queue; cotQueue_Init(&queue, buf, sizeof(buf), sizeof(int)); // 在尾部追加元素 int data = 42; cotQueue_Push(&queue, &data, sizeof(data)); data = 895; cotQueue_Push(&queue, &data, sizeof(data)); // 访问元素 int *pData = (int *)cotQueue_Front(&queue); printf("val = %d \n", *pData); // 弹出首个元素 cotQueue_Pop(&queue); return 0;}
队列(不定长FIFO)使用方式demo
int main(){ uint8_t buf[10]; cotIndQueue_t queue; cotIndQueue_Init(&queue, buf, sizeof(buf)); // 在尾部追加元素 char data = 42; cotIndQueue_Push(&queue, &data, sizeof(data)); int data1 = 80; cotIndQueue_Push(&queue, &data, sizeof(data1)); long data2 = -400; cotIndQueue_Push(&queue, &data, sizeof(data2)); // 访问元素 size_t length; int *pData = (int *)cotIndQueue_Front(&queue, &length); printf("val = %d \n", *pData, length); // 弹出首个元素 cotIndQueue_Pop(&queue); return 0;}
单向栈使用方式demo
int main(){ uint8_t buf[10]; cotStack_t stack; cotStack_Init(&stack, buf, sizeof(buf), sizeof(int)); // 在顶部追加元素 int data = 42; cotStack_Push(&stack, &data, sizeof(data)); data = 895; cotQueue_Push(&stack, &data, sizeof(data)); // 访问元素 int *pData = (int *)cotStack_Top(&stack); printf("val = %d \n", *pData); // 弹出顶部元素 cotStack_Pop(&stack); return 0;}
序列化/反序列化功能使用说明
可以定义一个公共头文件
#ifndef STRUCT_H#define STRUCT_H#include "serialize/serialize.h"COT_DEFINE_STRUCT_TYPE(test_t, ((UINT16_T) (val1) (2)) ((INT32_T) (val2) (1)) ((UINT8_T) (val3) (1)) ((INT16_T) (val4) (1)) ((DOUBLE_T) (val5) (1)) ((INT16_T) (val6) (1)) ((STRING_T) (szName) (100)) ((DOUBLE_T) (val7) (1)) ((FLOAT_T) (val8) (1)) ((STRING_T) (szName1) (100)))#endif // STRUCT_H
各个模块引用头文件使用
#include "struct.h"int main(){ uint8_t buf[100]; // 序列化使用demo COT_DEFINE_STRUCT_VARIABLE(test_t, test); test.val1[0] = 5; test.val1[1] = 89; test.val2 = -9; test.val3 = 60; test.val4 = -999; test.val5 = 5.6; test.val6 = 200; test.val7 = -990.35145; test.val8 = -80.699; sprintf(test.szName, "test56sgdgdfgdfgdf"); sprintf(test.szName1, "sdfsdf"); int length = test.Serialize(buf, &test); printf("Serialize: \n"); for (int i = 0; i < length; i++) { printf("%02x %s", buf[i], (i + 1) % 16 == 0 ? "\n" : ""); } printf("\n"); // 反序列化使用demo test_t test2; // COT_DEFINE_STRUCT_VARIABLE(test_t, test2); COT_INIT_STRUCT_VARIABLE(test_t, test2); test2.Parse(&test2, buf); printf("val = %d\n", test2.val1[0]); printf("val = %d\n", test2.val1[1]); printf("val = %d\n", test2.val2); printf("val = %d\n", test2.val3); printf("val = %d\n", test2.val4); printf("val = %lf\n", test2.val5); printf("val = %d\n", test2.val6); printf("name = %s\n", test2.szName); printf("val = %lf\n", test2.val7); printf("val = %f\n", test2.val8); printf("name = %s\n", test2.szName1); return 0;}
------------END------------
关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
下一篇:最后一页
X 关闭
推荐内容
- 嵌入式代码单元测试如何完成? 环球今头条
- 流亭街道西后楼社区开展信用美德主题活动_环球热资讯
- 伊朗一对“情侣”躲进谷仓中拥吻,被人们发现时,已经吻了2800年
- 每日焦点!构造反转_关于构造反转概略
- 展销会主持视频-展销会主持稿
- 焦点快播:羽毛球——泰国公开赛:陆光祖无缘半决赛
- 后会无期徐良歌词_徐良歌手简介
- 环球观速讯丨天房发展(600322)6月2日主力资金净卖出189.37万元
- “最严”国标更益于中国宝宝-独家
- 每日速读!牛生肖婚配哪个生肖合适,生肖牛男,和什么生肖最适合婚配
- 教育部和各省(区、市)开通2023年高考举报电话
- 明星大侦探柠檬影院_明星大侦探第2季免费天天影院
- 张良点金:午后黄金现价或1975直接空! 当前热点
- 水泥细度检验方法筛析法注意事项_水泥细度检验方法筛析法 天天滚动
- 免费财务软件哪个好用
- 桃胶雪燕皂角米能天天吃吗?(桃胶皂角米雪燕可以天天吃)_全球微速讯
- 今日热闻!马化腾“收紧队形”刷屏!腾讯员工一年减少1万人 裁员离你还有多远?
- 不负青春 励志前行 天天速看
- 世界今亮点!多个低碳智能新品亮相第二十三届中国国际石油石化技术装备展览会
- 全球看热讯:瑞德智能(301135):股价成功突破年线压力位-后市看多(涨)(06-02)
- 微信怎么找附近的人约(微信怎么找附近的人)|今头条
- 事业单位职务怎么填?普通员工_事业单位职务怎么填
- 中颖电子6月2日快速上涨-每日短讯
- 抖音播放量怎么赚取收益?如何提高播放量?
- 湘潭市发改委开展“美好生活·民法典相伴”普法宣传系列活动-世界速看料
- 永恒之地异闻录_关于永恒之地异闻录简述 今日观点
- 丽江市转作风抓落实推动林长制从全面建立到全面见效
- 贵州未来十天强降雨频繁 局部有暴雨到大暴雨
- 环球今亮点!2023郑州1分钱乘地铁活动什么时候结束
- 新疆:党建赋能促“5·31”专案顺利侦结_每日速看
- 环球看热讯:第四批鼓励研发申报 儿童药品建议清单发布
- 全美第一高中生给湖人留下了深刻的印象,他是湖人的潜在目标?-每日消息
- 每日时讯!国产培育钻石是如何“长成”的?
- 安徽村民拦下赴河南收割机就地作业是什么情况 环球精选
- 环球讯息:生 意 宝:6月1日融资净买入18.44万元,连续3日累计净买入757.59万元
- “韵味杭州”2023全国卡巴迪冠军赛开赛 亚运版“老鹰捉小鸡”抢先看 环球热推荐
- 环球报道:长飞光纤:6月1日融资买入923.51万元,融资融券余额1.56亿元
- 环球快资讯丨车祸二级轻伤害怎么判刑赔偿多少钱_车祸轻伤二级要赔偿多少钱车祸轻伤私了一般多少钱
- 焦点日报:云南昭通两河镇强降雨引发内涝 疏散转移356名学生
- 环球视点!摩尔线程国产游戏显卡开售:2499元 7nm工艺
- 人心不古啥意思_人心不古 冷暖自知是什么意思
- 油路清洁剂_油路
- 【天天报资讯】2023年全国科技活动周闭幕
- 河陆空全方位智能化监测预警|北斗系统助力赤水防灾减灾 当前通讯
- 住院医生和门诊医生的区别(住院医生) 热消息
- 诺泰生物(688076.SH):公司司美格鲁肽原料药目前已供应多家海外及国内客户仿制药研发
- 环球快报:今年前四个月 我国服务贸易总体保持增长态势
- 微资讯!龙元建设6月1日大宗交易成交1746.60万元
- 江津防汛应急响应升级为Ⅲ级
- 网易账号用身份证找回几率大吗 网易账号用身份证找回
- 辽宁两地突现龙卷风,70多户受灾,多趟高铁延误!现场视频 即时看
- 又有基金公司出手自购! 世界最资讯
- 对话招行:不唯“财富中收论”,持续发力长期能力构建
- 6月1日起 遂宁市慈善总会·未成年人保护专项基金接收社会公众捐赠-全球微头条
- 夏季裙子披肩薄款_夏季裙子 焦点速读
- 世界简讯:劳资纠纷找律师收费多少
- 《变形金刚:超能勇士崛起》三大阵营霸气登场大银幕再筑梦
- 吉林大学珠海学院怎么样 吉林大学珠海学院全国排名
- 全球快资讯:英派斯(002899)6月1日主力资金净卖出99.05万元
- 短讯!运行内存8g和12g的区别_8g版iphone4
- 预防肺结核的知识点_预防肺结核病小知识-当前关注
- 天天快播:韩国调查:中国在东盟电动汽车市场占有率居首位,超过韩国
- 苏丹民航局宣布延长领空关闭时间至6月15日
- 焦点速讯:激发科普活力 播撒科学种子
- 保持谨慎理性 预付式消费做到“五要”|每日快看
- 广西退休人员养老金调整方案计算公式表格最新 2023广西退休人员养老金调整新消息 焦点信息
- 今日讯!马斯克深夜参观特斯拉上海超级工厂 计划周四飞往美国
- 汪建华:6月钢价有望迎来情绪修复性反弹
- 秦淮区国土空间分区规划草案发布
- 世界聚焦:美团发布《2023儿童餐线上消费洞察报告》 川渝儿童餐消费位居全国前列
- 当前快讯:尚网网络_尚网
- 油耳朵一定会是狐臭吗百度百科_油耳朵一定有狐臭吗-环球动态
- 世界即时看!刘烨袁姗姗传绯闻是怎么回事 刘烨袁姗姗真的在一起了吗
- 环球热头条丨征文丨第十八届民间文化青年论坛奖征文启事
- 华东师范大学研究生院-华东师范大学研究生 环球快消息
- 三星s9怎么恢复出厂设置|当前速递
- 焦点日报:芦荟的原产地是哪儿_芦荟的原产地在哪里
- 焦点速讯:在中国科幻大会 探索航天梦想
- 2021最有诗意的网名_比较有诗意的网名 世界聚看点
- 当前快看:半导体板块涨1.01% 佰维存储涨20%居首
- 挂耳式耳机好用吗?和骨传导、挂脖式、入耳式比较谁好?-当前看点
- 每日资讯:河南18个省级专家组正在全省各地开展技术指导服务
- 全球今亮点!黔南州养老金调整计算公式 2022~2023年黔南州退休人员养老金调整最新消息
- 泰安市市场监管局召开全市食品监督抽检工作推进会
- 手持集装箱船订单34艘 福建船企生产忙-天天播报
- “诵”你一朵小红花!首届“童心向党·我是经典传诵人”活动获奖名单公布
- 世龙实业被证监会立案调查
- 世界焦点!郜林退役了吗_郜林妻子王晨
- 世界最新:又增加一个“国字号”!榆林市获评全国首个“枣花蜂蜜之乡”
- “二战以来最大规模空袭”,它们从哪里来的?
- 全球热讯:空间站应用与发展阶段乘组任务有6大类 在轨工作安排趋常态化
- 天天热讯:光迅科技(002281)5月30日主力资金净买入9427.98万元
- 青海加大科研力度寻求“人熊冲突”最优解
- 微资讯!苹果迎接开发者大会,在推特上启用 #WWDC23 Hashflag
- 世界今日讯!深市核心指数调整样本股
- 资讯推荐:保利发展(600048):5月30日北向资金减持383.07万股
- flash插件手机版下载_falsh插件
- 净化农资市场环境 市场监管总局公布农用生产资料违法典型案例 世界快播
- 夏天在家如何烹饪出比较美味的剁椒鱼头呢?
- 普伊格:马奎兹已经回到了他受伤前的水准
精彩推荐
-
嵌入式代码单元测试如何完成? 环球今头条2023-06-03
-
流亭街道西后楼社区开展信用美德主题活动_环球热资讯2023-06-03
-
伊朗一对“情侣”躲进谷仓中拥吻,被人们发现时,已经吻了2800年2023-06-03
-
每日焦点!构造反转_关于构造反转概略2023-06-03
-
展销会主持视频-展销会主持稿2023-06-03
-
焦点快播:羽毛球——泰国公开赛:陆光祖无缘半决赛2023-06-03
-
后会无期徐良歌词_徐良歌手简介2023-06-03
-
环球观速讯丨天房发展(600322)6月2日主力资金净卖出189.37万元2023-06-03
-
“最严”国标更益于中国宝宝-独家2023-06-03
-
每日速读!牛生肖婚配哪个生肖合适,生肖牛男,和什么生肖最适合婚配2023-06-03
-
教育部和各省(区、市)开通2023年高考举报电话2023-06-03
-
明星大侦探柠檬影院_明星大侦探第2季免费天天影院2023-06-03
-
张良点金:午后黄金现价或1975直接空! 当前热点2023-06-03
-
水泥细度检验方法筛析法注意事项_水泥细度检验方法筛析法 天天滚动2023-06-03
-
免费财务软件哪个好用2023-06-03
-
桃胶雪燕皂角米能天天吃吗?(桃胶皂角米雪燕可以天天吃)_全球微速讯2023-06-03
-
今日热闻!马化腾“收紧队形”刷屏!腾讯员工一年减少1万人 裁员离你还有多远?2023-06-03
-
不负青春 励志前行 天天速看2023-06-03
-
世界今亮点!多个低碳智能新品亮相第二十三届中国国际石油石化技术装备展览会2023-06-02
-
微信怎么找附近的人约(微信怎么找附近的人)|今头条2023-06-02
-
事业单位职务怎么填?普通员工_事业单位职务怎么填2023-06-02
-
中颖电子6月2日快速上涨-每日短讯2023-06-02
-
抖音播放量怎么赚取收益?如何提高播放量?2023-06-02
-
湘潭市发改委开展“美好生活·民法典相伴”普法宣传系列活动-世界速看料2023-06-02
-
永恒之地异闻录_关于永恒之地异闻录简述 今日观点2023-06-02
-
丽江市转作风抓落实推动林长制从全面建立到全面见效2023-06-02
-
贵州未来十天强降雨频繁 局部有暴雨到大暴雨2023-06-02
-
环球今亮点!2023郑州1分钱乘地铁活动什么时候结束2023-06-02
-
新疆:党建赋能促“5·31”专案顺利侦结_每日速看2023-06-02
-
环球看热讯:第四批鼓励研发申报 儿童药品建议清单发布2023-06-02
-
全美第一高中生给湖人留下了深刻的印象,他是湖人的潜在目标?-每日消息2023-06-02
-
每日时讯!国产培育钻石是如何“长成”的?2023-06-02
-
安徽村民拦下赴河南收割机就地作业是什么情况 环球精选2023-06-02
-
“韵味杭州”2023全国卡巴迪冠军赛开赛 亚运版“老鹰捉小鸡”抢先看 环球热推荐2023-06-02
-
环球报道:长飞光纤:6月1日融资买入923.51万元,融资融券余额1.56亿元2023-06-02
-
焦点日报:云南昭通两河镇强降雨引发内涝 疏散转移356名学生2023-06-02
-
环球视点!摩尔线程国产游戏显卡开售:2499元 7nm工艺2023-06-02
-
人心不古啥意思_人心不古 冷暖自知是什么意思2023-06-02
-
油路清洁剂_油路2023-06-02
-
【天天报资讯】2023年全国科技活动周闭幕2023-06-02
-
河陆空全方位智能化监测预警|北斗系统助力赤水防灾减灾 当前通讯2023-06-02
-
住院医生和门诊医生的区别(住院医生) 热消息2023-06-02
-
环球快报:今年前四个月 我国服务贸易总体保持增长态势2023-06-02
-
微资讯!龙元建设6月1日大宗交易成交1746.60万元2023-06-02
-
江津防汛应急响应升级为Ⅲ级2023-06-01
-
网易账号用身份证找回几率大吗 网易账号用身份证找回2023-06-01
-
辽宁两地突现龙卷风,70多户受灾,多趟高铁延误!现场视频 即时看2023-06-01
-
又有基金公司出手自购! 世界最资讯2023-06-01
-
对话招行:不唯“财富中收论”,持续发力长期能力构建2023-06-01
-
6月1日起 遂宁市慈善总会·未成年人保护专项基金接收社会公众捐赠-全球微头条2023-06-01
-
夏季裙子披肩薄款_夏季裙子 焦点速读2023-06-01
-
世界简讯:劳资纠纷找律师收费多少2023-06-01
-
《变形金刚:超能勇士崛起》三大阵营霸气登场大银幕再筑梦2023-06-01
-
吉林大学珠海学院怎么样 吉林大学珠海学院全国排名2023-06-01
-
全球快资讯:英派斯(002899)6月1日主力资金净卖出99.05万元2023-06-01
-
短讯!运行内存8g和12g的区别_8g版iphone42023-06-01
-
预防肺结核的知识点_预防肺结核病小知识-当前关注2023-06-01
-
天天快播:韩国调查:中国在东盟电动汽车市场占有率居首位,超过韩国2023-06-01
-
苏丹民航局宣布延长领空关闭时间至6月15日2023-06-01
-
焦点速讯:激发科普活力 播撒科学种子2023-06-01
-
保持谨慎理性 预付式消费做到“五要”|每日快看2023-06-01
-
今日讯!马斯克深夜参观特斯拉上海超级工厂 计划周四飞往美国2023-06-01
-
汪建华:6月钢价有望迎来情绪修复性反弹2023-06-01
-
秦淮区国土空间分区规划草案发布2023-06-01
-
世界聚焦:美团发布《2023儿童餐线上消费洞察报告》 川渝儿童餐消费位居全国前列2023-06-01
-
当前快讯:尚网网络_尚网2023-06-01
-
油耳朵一定会是狐臭吗百度百科_油耳朵一定有狐臭吗-环球动态2023-06-01
-
世界即时看!刘烨袁姗姗传绯闻是怎么回事 刘烨袁姗姗真的在一起了吗2023-06-01
-
环球热头条丨征文丨第十八届民间文化青年论坛奖征文启事2023-06-01
-
华东师范大学研究生院-华东师范大学研究生 环球快消息2023-05-31
-
三星s9怎么恢复出厂设置|当前速递2023-05-31
-
焦点日报:芦荟的原产地是哪儿_芦荟的原产地在哪里2023-05-31
-
焦点速讯:在中国科幻大会 探索航天梦想2023-05-31
-
2021最有诗意的网名_比较有诗意的网名 世界聚看点2023-05-31
-
当前快看:半导体板块涨1.01% 佰维存储涨20%居首2023-05-31
-
挂耳式耳机好用吗?和骨传导、挂脖式、入耳式比较谁好?-当前看点2023-05-31
-
每日资讯:河南18个省级专家组正在全省各地开展技术指导服务2023-05-31
-
泰安市市场监管局召开全市食品监督抽检工作推进会2023-05-31
-
手持集装箱船订单34艘 福建船企生产忙-天天播报2023-05-31
-
“诵”你一朵小红花!首届“童心向党·我是经典传诵人”活动获奖名单公布2023-05-31
-
世龙实业被证监会立案调查2023-05-31
-
世界焦点!郜林退役了吗_郜林妻子王晨2023-05-31
-
世界最新:又增加一个“国字号”!榆林市获评全国首个“枣花蜂蜜之乡”2023-05-31
-
“二战以来最大规模空袭”,它们从哪里来的?2023-05-31
-
全球热讯:空间站应用与发展阶段乘组任务有6大类 在轨工作安排趋常态化2023-05-31
-
天天热讯:光迅科技(002281)5月30日主力资金净买入9427.98万元2023-05-31
-
青海加大科研力度寻求“人熊冲突”最优解2023-05-31
-
微资讯!苹果迎接开发者大会,在推特上启用 #WWDC23 Hashflag2023-05-31
-
世界今日讯!深市核心指数调整样本股2023-05-31
-
资讯推荐:保利发展(600048):5月30日北向资金减持383.07万股2023-05-31
-
flash插件手机版下载_falsh插件2023-05-31
-
净化农资市场环境 市场监管总局公布农用生产资料违法典型案例 世界快播2023-05-31
-
夏天在家如何烹饪出比较美味的剁椒鱼头呢?2023-05-31
-
普伊格:马奎兹已经回到了他受伤前的水准2023-05-31