package_data
时间: 2023-10-14 12:06:16 浏览: 33
"package_data" 是一个常见的 Python 项目配置选项,用于指定哪些附加数据文件应包含在发布的软件包中。这些数据文件可以是配置文件、静态资源、模板文件等。通过在项目的 setup.py 或 setup.cfg 文件中设置 package_data 字段,可以告诉打包工具将这些文件包含在最终生成的软件包中。这样,在安装软件包时,这些数据文件也会被正确地安装到相应的位置。
相关问题
int parse_package(uint8_t *buf, uint32_t size) { int i; protocol_package_t *pk = (protocol_package_t *)buf; uint16_t crc16_calc_value = dataVerificationCRC16(buf, size - 2); uint16_t crc16_package_value = pk->data[pk->len] << 8 | pk->data[pk->len + 1]; printf("----------package---------\r\n"); printf("head:%x\r\n", pk->head); printf("id:%x\r\n", pk->id); printf("func:%x\r\n", pk->function); printf("len:%x\r\n", pk->len); printf("data:"); for(i = 0; i < pk->len; ++i){ printf("%x ", pk->data[i]); } printf("\r\n"); printf("CRC16_package_value:%x\n", pk->data[i] << 8 | pk->data[i + 1]); printf("CRC16_calculate_value:%x\n", crc16_calc_value); if(crc16_calc_value != crc16_package_value){ printf("package_data_error"); return PACKAGE_DATA_ERROR; } if(pk->id >= END_DEVICE_ID){ return PACKAGE_ID_ERROR; } device_control = device_control_function[pk->id]; if(device_control){ return device_control(pk); }else{ return EMPTY_DEVICE_HANDLE_FUNCTION; } //return PACKAGE_OK; }写每一行的注释
// 函数的名称为 parse_package,传入参数为指向 uint8_t 类型的指针 buf 和一个 uint32_t 类型的 size
int parse_package(uint8_t *buf, uint32_t size) {
// 定义变量 i,声明并初始化一个 protocol_package_t 结构体指针 pk,使其指向 buf 所指向的地址
int i;
protocol_package_t *pk = (protocol_package_t *)buf;
// 计算 buf 中除去最后两个字节的 CRC16 值,将结果保存到 crc16_calc_value 中
uint16_t crc16_calc_value = dataVerificationCRC16(buf, size - 2);
// 将 buf 中最后两个字节转换为 uint16_t 类型的 CRC16 值,保存到 crc16_package_value 中
uint16_t crc16_package_value = pk->data[pk->len] << 8 | pk->data[pk->len + 1];
// 打印分割线和 package 的头、ID、功能码、长度,并输出 data 数组中的每个元素
printf("----------package---------\r\n");
printf("head:%x\r\n", pk->head);
printf("id:%x\r\n", pk->id);
printf("func:%x\r\n", pk->function);
printf("len:%x\r\n", pk->len);
printf("data:");
for(i = 0; i < pk->len; ++i){
printf("%x ", pk->data[i]);
}
printf("\r\n");
// 输出 CRC16 的计算值和 package 中的值,如果不相等则输出数据错误并返回 PACKAGE_DATA_ERROR
printf("CRC16_package_value:%x\n", pk->data[i] << 8 | pk->data[i + 1]);
printf("CRC16_calculate_value:%x\n", crc16_calc_value);
if(crc16_calc_value != crc16_package_value){
printf("package_data_error");
return PACKAGE_DATA_ERROR;
}
// 如果 package 中的 ID 大于等于 END_DEVICE_ID,则返回 PACKAGE_ID_ERROR
if(pk->id >= END_DEVICE_ID){
return PACKAGE_ID_ERROR;
}
// 根据设备 ID 获取其控制函数,如果存在则执行该函数并返回其返回值,否则返回 EMPTY_DEVICE_HANDLE_FUNCTION
device_control = device_control_function[pk->id];
if(device_control){
return device_control(pk);
}else{
return EMPTY_DEVICE_HANDLE_FUNCTION;
}
//return PACKAGE_OK;
}
请解释以下几行代码的意思set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { clk }]; create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }]; set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[0]}] set_property PACKAGE_PIN T14 [get_ports {ad_data[7]}] set_property PACKAGE_PIN U12 [get_ports {ad_data[6]}] set_property PACKAGE_PIN U13 [get_ports {ad_data[5]}] set_property PACKAGE_PIN V13 [get_ports {ad_data[4]}] set_property PACKAGE_PIN V15 [get_ports {ad_data[3]}] set_property PACKAGE_PIN T15 [get_ports {ad_data[2]}] set_property PACKAGE_PIN R16 [get_ports {ad_data[1]}] set_property PACKAGE_PIN U17 [get_ports {ad_data[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {ad_clk}] set_property PACKAGE_PIN V17 [get_ports {ad_clk}]
这些代码是针对 Vivado 工具对 FPGA 设计进行约束(constraints)的语句,用于指定 FPGA 设备的引脚映射、时钟、电平标准等信息,以保证设计在硬件上能够正确工作。
具体来说,这些语句的含义如下:
1. `set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { clk }];`
- `set_property` 是 Vivado 工具中的约束命令,用于设置约束属性。
- `-dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 }` 表示设置一个字典类型的属性,其中 `PACKAGE_PIN` 表示引脚的物理位置,`H16` 是该引脚的位置,`IOSTANDARD` 表示引脚的电平标准,`LVCMOS33` 表示使用 LVCMOS33 标准。
- `[get_ports { clk }]` 表示获取名为 `clk` 的端口对象,将 `PACKAGE_PIN` 和 `IOSTANDARD` 属性设置为上面指定的值。
2. `create_clock -add -name sys_clk_pin -period 8.00 -waveform {0 4} [get_ports { clk }];`
- `create_clock` 命令用于创建时钟对象。
- `-add` 表示将新的时钟添加到已有的时钟列表中。
- `-name sys_clk_pin` 表示设置时钟的名称为 `sys_clk_pin`。
- `-period 8.00` 表示时钟周期为 8ns。
- `-waveform {0 4}` 表示时钟波形为持续 0ns,然后持续 4ns。
- `[get_ports { clk }]` 表示获取名为 `clk` 的时钟端口对象,将其设置为新建时钟的源。
3. `set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[7]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[6]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[5]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[4]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[3]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[2]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[1]}]`、`set_property IOSTANDARD LVCMOS33 [get_ports {ad_data[0]}]`
- 这些语句用于设置名为 `ad_data[7]`、`ad_data[6]`、`ad_data[5]`、`ad_data[4]`、`ad_data[3]`、`ad_data[2]`、`ad_data[1]`、`ad_data[0]` 的端口使用 LVCMOS33 电平标准。
4. `set_property PACKAGE_PIN T14 [get_ports {ad_data[7]}]`、`set_property PACKAGE_PIN U12 [get_ports {ad_data[6]}]`、`set_property PACKAGE_PIN U13 [get_ports {ad_data[5]}]`、`set_property PACKAGE_PIN V13 [get_ports {ad_data[4]}]`、`set_property PACKAGE_PIN V15 [get_ports {ad_data[3]}]`、`set_property PACKAGE_PIN T15 [get_ports {ad_data[2]}]`、`set_property PACKAGE_PIN R16 [get_ports {ad_data[1]}]`、`set_property PACKAGE_PIN U17 [get_ports {ad_data[0]}]`
- 这些语句用于将 `ad_data[7]`、`ad_data[6]`、`ad_data[5]`、`ad_data[4]`、`ad_data[3]`、`ad_data[2]`、`ad_data[1]`、`ad_data[0]` 端口映射到具体的 FPGA 引脚上,分别为 `T14`、`U12`、`U13`、`V13`、`V15`、`T15`、`R16` 和 `U17`。
5. `set_property IOSTANDARD LVCMOS33 [get_ports {ad_clk}]`、`set_property PACKAGE_PIN V17 [get_ports {ad_clk}]`
- 这些语句用于设置名为 `ad_clk` 的端口使用 LVCMOS33 电平标准,并将其映射到引脚 `V17` 上。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)