ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

C SV--数据类型对应关系及内存映射

C  SV--数据类型对应关系及内存映射 1. C SV 数据类型数据映射和在C侧输入输出c侧输入需要const修饰输出需要指针赋值无符号类型数组和向量动态数组一律用 svOpenArrayHandleC语言定义使用C标准的函数定义方式如下#include stdio.h#include stdint.h#include stdlib.h#include svdpi.hvoid c_model_calc_dither(const svOpenArrayHandle index_k,const svOpenArrayHandle imon_data,const uint16_t width,const uint16_t height,svOpenArrayHandle calc_dither_data){FILE* dither_log fopen(./log/dither_pro.log, a); int pix_total width * height; int col_cnt 0; int row_cnt 0; int pix_addr 0; uint8_t* index_tmp; uint16_t* imon_data_tmp; index_tmp (uint8_t*)malloc(9 * sizeof(uint8_t)); imon_data_tmp (uint16_t*)malloc(pix_total * sizeof(uint16_t)); uint32_t* mult_index_data; mult_index_data (uint32_t*)malloc(pix_total * sizeof(uint32_t)); if (index_tmp NULL || imon_data_tmp NULL || mult_index_data NULL) { printf([DITHER_C_MODEL] malloc failed!\n); return; } int i; for(i0; i9; i){ index_tmp[i] *((uint8_t*)svGetArrElemPtr1(index_k,i)); } for(pix_addr 0; pix_addr pix_total; pix_addr){ imon_data_tmp[pix_addr] *((uint16_t*)svGetArrElemPtr1(imon_data, pix_addr)); } fprintf(dither_log, index_tmp[0]: %d, index_tmp[1]: %d, index_tmp[2]: %d\n, index_tmp[0], index_tmp[1], index_tmp[2]); fprintf(dither_log, index_tmp[3]: %d, index_tmp[4]: %d, index_tmp[5]: %d\n, index_tmp[3], index_tmp[4], index_tmp[5]); fprintf(dither_log, index_tmp[6]: %d, index_tmp[7]: %d, index_tmp[8]: %d\n, index_tmp[6], index_tmp[7], index_tmp[8]); for (row_cnt 0; row_cnt height; row_cnt) { for (col_cnt 0; col_cnt width; col_cnt) { int addr row_cnt * width col_cnt; if (row_cnt 0 || row_cnt height - 1) { mult_index_data[addr] imon_data_tmp[addr]; } else { fprintf(dither_log, row_cnt: %d, col_cnt: %d\n, row_cnt, col_cnt, a); if (col_cnt 0) { mult_index_data[addr] (index_tmp[1] * imon_data_tmp[(row_cnt - 1)*width] index_tmp[2] * imon_data_tmp[(row_cnt - 1)*width 1] index_tmp[4] * imon_data_tmp[row_cnt * width] index_tmp[5] * imon_data_tmp[row_cnt * width 1] index_tmp[7] * imon_data_tmp[(row_cnt 1)*width] index_tmp[8] * imon_data_tmp[(row_cnt 1)*width 1]) 4 0x0FFF; fprintf(dither_log, idata[1]: %d, idata[2]: %d\n, imon_data_tmp[(row_cnt - 1)*width], imon_data_tmp[(row_cnt - 1)*width 1], a); fprintf(dither_log, idata[4]: %d, idata[5]: %d\n, imon_data_tmp[(row_cnt)*width], imon_data_tmp[(row_cnt)*width 1], a); fprintf(dither_log, idata[7]: %d, idata[8]: %d\n, imon_data_tmp[(row_cnt 1)*width], imon_data_tmp[(row_cnt 1)*width 1], a); } else if (col_cnt width - 1) { mult_index_data[addr] (index_tmp[0] * imon_data_tmp[(row_cnt - 1)*width col_cnt - 1] index_tmp[1] * imon_data_tmp[(row_cnt - 1)*width col_cnt] index_tmp[3] * imon_data_tmp[row_cnt * width - 1 col_cnt] index_tmp[4] * imon_data_tmp[row_cnt * width col_cnt] index_tmp[6] * imon_data_tmp[(row_cnt 1)*width - 1 col_cnt] index_tmp[7] * imon_data_tmp[(row_cnt 1)*width col_cnt]) 4 0x0FFF; fprintf(dither_log, idata[0]: %d, idata[1]: %d\n, imon_data_tmp[(row_cnt - 1)*width col_cnt -1], imon_data_tmp[(row_cnt - 1)*width col_cnt], a); fprintf(dither_log, idata[3]: %d, idata[4]: %d\n, imon_data_tmp[(row_cnt)*width col_cnt -1], imon_data_tmp[(row_cnt)*width col_cnt], a); fprintf(dither_log, idata[6]: %d, idata[7]: %d\n, imon_data_tmp[(row_cnt 1)*width col_cnt -1], imon_data_tmp[(row_cnt 1)*width col_cnt], a); } else { mult_index_data[addr] (index_tmp[0] * imon_data_tmp[(row_cnt - 1)*width - 1 col_cnt] index_tmp[1] * imon_data_tmp[(row_cnt - 1)*width col_cnt] index_tmp[2] * imon_data_tmp[(row_cnt - 1)*width col_cnt 1] index_tmp[3] * imon_data_tmp[row_cnt * width - 1 col_cnt] index_tmp[4] * imon_data_tmp[row_cnt * width col_cnt] index_tmp[5] * imon_data_tmp[row_cnt * width col_cnt 1] index_tmp[6] * imon_data_tmp[(row_cnt 1)*width - 1 col_cnt] index_tmp[7] * imon_data_tmp[(row_cnt 1)*width col_cnt] index_tmp[8] * imon_data_tmp[(row_cnt 1)*width col_cnt 1]) 4 0x0FFF; fprintf(dither_log, idata[0]: %d, idata[1]: %d, idata[2]: %d\n, imon_data_tmp[(row_cnt - 1)*width - 1 col_cnt], imon_data_tmp[(row_cnt - 1)*width col_cnt], imon_data_tmp[(row_cnt - 1)*width col_cnt 1], a); fprintf(dither_log, idata[3]: %d, idata[4]: %d, idata[5]: %d\n, imon_data_tmp[row_cnt * width - 1 col_cnt], imon_data_tmp[row_cnt * width col_cnt], imon_data_tmp[row_cnt * width col_cnt 1], a); fprintf(dither_log, idata[6]: %d, idata[7]: %d, idata[8]: %d\n, imon_data_tmp[(row_cnt 1)*width - 1 col_cnt], imon_data_tmp[(row_cnt 1)*width col_cnt], imon_data_tmp[(row_cnt 1)*width col_cnt 1], a); } } } } for(pix_addr 0; pix_addr pix_total; pix_addr) { *((uint32_t*)svGetArrElemPtr1(calc_dither_data, pix_addr)) mult_index_data[pix_addr]; } free(index_tmp); free(imon_data_tmp); free(mult_index_data); }2. C代码流程导入标准库文件定义函数名和函数输入输出变量地址空间申请传递给指针
返回列表