第64节:大数据的乘法运算
时间:11-22
来源:互联网
点击:
- /用来解析数据协议的中间变量
- unsigned char ucDataBCD4_1[BCD4_MAX]; //接收到的第1个数组合BCD码数组形式这里是指被乘数
- unsigned char ucDataBCD4_cnt_1=0;//接收到的第1个数组合BCD码数组的有效数据长度
- unsigned char ucDataBCD4_2[BCD4_MAX]; //接收到的第2个数组合BCD码数组形式这里是指乘数
- unsigned char ucDataBCD4_cnt_2=0;//接收到的第2个数组合BCD码数组的有效数据长度
- unsigned char ucDataBCD4_3[BCD4_MAX]; //接收到的第3个数组合BCD码数组形式这里是指积
- unsigned char ucDataBCD4_cnt_3=0;//接收到的第3个数组合BCD码数组的有效数据长度
- unsigned char ucDataBCD8_1[BCD8_MAX]; //接收到的第1个数非组合BCD码数组形式 这里是指被乘数
- unsigned char ucDataBCD8_cnt_1=0;//接收到的第1个数非组合BCD码数组的有效数据长度
- unsigned char ucDataBCD8_2[BCD8_MAX]; //接收到的第2个数非组合BCD码数组形式 这里是指乘数
- unsigned char ucDataBCD8_cnt_2=0;//接收到的第2个数非组合BCD码数组的有效数据长度
- unsigned char ucDataBCD8_3[BCD8_MAX]; //接收到的第3个数非组合BCD码数组形式 这里是指积
- unsigned char ucDataBCD8_cnt_3=0;//接收到的第3个数非组合BCD码数组的有效数据长度
- unsigned char ucResultFlag=11; //运算结果标志,10代表计算结果超出范围出错,11代表正常。
- void main()
- {
- initial_myself();
- delay_long(100);
- initial_peripheral();
- while(1)
- {
- usart_service();//串口服务程序
- }
- }
- /* 注释二:
- * 组合BCD码转成非组合BCD码。
- * 这里的变量ucBCD4_cnt代表组合BCD码的有效字节数.
- * 这里的变量*p_ucBCD8_cnt代表经过转换后,非组合BCD码的有效字节数,记得加地址符号&传址进去
- * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
- * 同时引进了组合BCD码的有效字节数变量。这样就不限定了数据的长度,
- * 可以让我们根据数据的实际大小灵活运用。
- */
- void BCD4_to_BCD8(const unsigned char *p_ucBCD_bit4,unsigned char ucBCD4_cnt,unsigned char *p_ucBCD_bit8,unsigned char *p_ucBCD8_cnt)
- {
- unsigned char ucTmep;
- unsigned char i;
- for(i=0;i
- {
- p_ucBCD_bit8[i]=0;
- }
- *p_ucBCD8_cnt=ucBCD4_cnt*2; //转换成非组合BCD码后的有效数据长度
- for(i=0;i
- {
- ucTmep=p_ucBCD_bit4[ucBCD4_cnt-1-i];
- p_ucBCD_bit8[ucBCD4_cnt*2-i*2-1]=ucTmep>>4;
- p_ucBCD_bit8[ucBCD4_cnt*2-i*2-2]=ucTmep&0x0f;
- }
- }
- /* 注释三:
- * 非组合BCD码转成组合BCD码。
- * 这里的变量ucBCD8_cnt代表非组合BCD码的有效字节数.
- * 这里的变量*p_ucBCD4_cnt代表经过转换后,组合BCD码的有效字节数,记得加地址符号&传址进去
- * 本程序在上一节的基础上,略作修改,用循环for语句压缩了代码,
- * 同时引进了非组合BCD码的有效字节数变量。这样就不限定了数据的长度,
- * 可以让我们根据数据的实际大小灵活运用。
- */
- void BCD8_to_BCD4(const unsigned char *p_ucBCD_bit8,unsigned char ucBCD8_cnt,unsigned char *p_ucBCD_bit4,unsigned char *p_ucBCD4_cnt)
- {
- unsigned char ucTmep;
- unsigned char i;
- unsigned char ucBCD4_cnt;
- for(i=0;i
- {
- p_ucBCD_bit4[i]=0;
- }
- ucBCD4_cnt=(ucBCD8_cnt+1)/2; //非组合BCD码转化成组合BCD码的有效数,这里+1避免非组合数据长度是奇数位
- *p_ucBCD4_cnt=ucBCD4_cnt; //把转换后的结果付给接口指针的数据,可以对外输出结果
- for(i=0;i
- {
- ucTmep=p_ucBCD_bit8[ucBCD4_cnt*2-1-i*2]; //把非组合BCD码第8位分解出来
- p_ucBCD_bit4[ucBCD4_cnt-1-i]=ucTmep<4;
- p_ucBCD_bit4[ucBCD4_cnt-1-i]=p_ucBCD_bit4[ucBCD4_cnt-1-i]+p_ucBCD_bit8[ucBCD4_cnt*2-2-i*2]; //把非组合BCD码第7位分解出来
- }
- }
- /* 注释四:
- *函数介绍:清零数组的全部数组数据
- *输入参数:ucARRAY_MAX代表数组定义的最大长度
- *输入输出参数:*destData--被清零的数组。
- */
- void ClearAllData(uchar ucARRAY_MAX,uchar *destData)
- {
- uchar i;
- for(i=0;i
- {
- destData[i]=0;
- }
- }
- /* 注释五:
- *函数介绍:获取数组的有效长度
- *输入参数:*destData--被获取的数组。
- *输入参数:ucARRAY_MAX代表数组定义的最大长度
- *返回值:返回数组的有效长度。比如58786这个数据的有效长度是5
- *电子开发者作者:吴坚鸿
- */
- uchar GetDataLength(const uchar *destData,uchar ucARRAY_MAX)
- {
- uchar i;
- uchar DataLength=ucARRAY_MAX;
- for(i=0;i
- {
- if(0!=destData[ucARRAY_MAX-1-i])
- {
- break;
- }
- else
- {
- DataLength--;
- }
- }
大数据乘法运 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)