关于在DSP工程内数组、strnpy函数、atoi函数的使用心得

  这个是我在用DSP实现一个功能时遇到的问题,程序要求获取一个字符数组里面指定位置的数据。

  1. 关于数组的声明方法:

  数组的声明方式有以下几种

    char ch[4] = {‘a‘,‘b‘,‘c‘,};//方式1  {}里面也可以不填写数据
    char ch2[]="multi";//方式2  这种声明方式在开发DSP工程时最稳定
    char *ch3 = "micro";//方式3  指针方式
    char *ch4[3] = {"i” “love","China"};//方式4 

  当时我在DSP程序里面采用的是第一种方式来接受SCIA串口发过来的数据

  unsigned char rxaBuffer[17] = {""};

但结果显示出来的数据是有问题的,在用CCS软件调看rxaBuffer数组所在内存地址内的数据发现,数据并不只是16位,而是多出了几位,并且该数组最后也没有‘\0‘位。疑惑之时就用eclipse按照这种方式定义数组,调试运行之后发现,这时候数组里是有‘\0‘位的。所以感觉数组在标准C下和工程下的使用是有些不同的,感觉原因就出在数组的结尾符‘\0‘上面。所以下一次调试时就采用了方式2的声明方法,然后在DSP里面多次调试,最后发现数据是正确的,而方式2这种声明数组的方式在DSP工程里是最稳定的。

  方式2的好处就在于,由于没有初始化数组的长度,所以编译器会根据{}里面的数据个数自动计算数组长度,并且关键的是编译器会自动给数组添加结尾符‘\0‘。这样一来,数组的长度是由编译器来定的,减少人为干预,也就减少了程序出错的概率。

  对于方式3和方式4,在DSP上测试了一下,rxaBuffer数组内的数据是正确的,但使用strncpy函数截取rxaBuffer数组内的指定位置数据时出现出现问题

    strncpy(rxaBuffer_SelectEPwm, rxaBuffer, 1);
    strncpy(rxaBuffer_Rotation, rxaBuffer + 2, 1);
    strncpy(rxaBuffer_EPwmFrequency, rxaBuffer + 4, 7);
    strncpy(rxaBuffer_Occpuy_A, rxaBuffer + 12, 2);
    strncpy(rxaBuffer_Occpuy_B, rxaBuffer + 15, 2);

  如上程序所示,前三个数组均能正确的截取到rxaBuffer数组内的数据,但rxaBuffer_Occpuy_A数组却我发获取数组内的数据,进入rxaBuffer_Occpuy_A数组内存地址查询,发现该数组内数据的确不是指定位置的数据。调试多次,也没解决这个问题。

  综上所述,如在工程项目里使用数组,小编推荐使用方式2的方法声明,这样既能保证数组里面有足够的长度空间存储数据,也能保证数组里面有结尾符‘\0‘。

  2. 关于strncpy函数的使用

  strncpy函数的作用就是获取目标数组内指定位置,指定长度的数据,并将这段数据拷贝到一个新的函数里。其用法为

  strncpy( dest, src, 10);//dest为待存数组,src为待截取数据的目标数组,10是截取src数组里的数据长度

  如若想要截取src数组里中间位置的数据,可采用这样的方式

  strncpy( dest, src + 5, 10);//src + 5 表示src数组里从第5个数据后开始复制数据

  同时要注意,使用strncpy函数时,目标数组src内必须有结尾符‘\0‘,否则会出错。这也是上文为什么推荐使用方式二来初始化数组。

  3. 关于atoi函数的使用

  此函数使用方法比较简单,其用法为

   int_SelectEPwm = atoi(rxaBuffer_SelectEPwm);

  int_SelectEPwm是int型变量,rxaBuffer_SelectEPwm是char型数组

  主要保证rxaBuffer_SelectEPwm数组里没有其他字符即可。

时间: 2024-10-24 11:31:03

关于在DSP工程内数组、strnpy函数、atoi函数的使用心得的相关文章

2016.5.21——atoi()函数的测试

对函数atoi()函数的测试: atoi()函数将字符串型转换为整型 代码: 1 #include "stdafx.h" 2 #include "iostream" 3 #include "vector" 4 //#include <stdlib.h> 5 using namespace std; 6 7 int _tmain(int argc, _TCHAR* argv[]) 8 { 9 char str[] = { "1

查找函数+atoi-----注册函数+strcmp函数

loadrunner中接口判断的2中方法    如下: 1. ●查找函数web_reg_find() ● atoi():将字符串转换为整型值 作比较  > 0 1 Action() 2 { 3 //检查点函数+atoi函数 4 web_reg_find("Search=Body", 5 "SaveCount=fin_cnt", 6 "Text=code\":\"0\"", 7 LAST); 8 9 lr_sta

PHP内置的字符串处理函数

字符串的特点    1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4),"<br>"; //cdef //使用数字会自动转化为字符串 echo substr(123456,2,4); //3456 ?> 2.可以将字符串视为数组,当做字符集合来看待 <?php $str="abcdefg"; //下面这两种方法都

【C/C++学院】0726-cppIDE/一级指针/指针数组/函数指针/函数指针数组/二级指针

[送给在路上的程序员] 对于一个开发者而言,能够胜任系统中任意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并可以运用到系统中,由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户满意的软件系统是起核心竞争力的体现. 每一个程序员都不能固步自封,要多接触新的行业,新的技术领域,突破自我. cppIDE 使用mfc和codeblocks中的mingw编译器.执行system命令中的bat批处理脚本. 一级指针 指针,结构体struct,

Python内置的字符串处理函数整理

Python内置的字符串处理函数整理 作者: 字体:[增加 减小] 类型:转载 时间:2013-01-29我要评论 Python内置的字符串处理函数整理,收集常用的Python 内置的各种字符串处理 函数的使用方法 str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length=%d' % (str,len(str)) 字母处理全部大写:str.upper()全

php与数组相关的各类函数的使用

定义二维数组 $a[][]=20;//二维数组 $c=array(20,30,[10,80]); echo '<pre>'; print_r($c); sort()升序  rsort()降序 $a=[10,50,1,2,5,80,40,58,33,22]; echo '<pre>'; print_r($a); sort($a); echo '<pre>'; print_r($a); asort()升序保留索引位置   asort()降序保留索引位置 $a=[10,50,

位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位清0(与0位与)且同时保留其它位不变(与1位与):获取某变量中某一位(与其位与后判断是否为该数) 2.|  按位或(双目): 将某变量中的某些位置1(与1位或)且保留其它位不变 3.^  按位异或(双目): 将某变量中的某些位取反(与1异或)且保留其它位不变 异或运算特点: 如果 a^b=c,那么就有 c^b = a以及c^a=b.(穷举法可证---用于

对一个字符数组连续用gets函数出现的问题(缓冲区内容补充)

昨天调试程序(见下面代码)遇到下面一个问题: #include<stdio.h> int main() { int i = 1; while(i) { char str[100]; printf("please input a str:\n"); gets(str); puts(str); printf("continue:1,break:0\n"); scanf("%d",&i); } return 0; } 咦!!!我还没

javascript 数组的常用操作函数

join() Array.join(/* optional */ separator) 将数组转换为字符串,可带一个参数 separator (分隔符,默认为","). 与之相反的一个方法是:String.splict() ,将字符串分隔成若干块来创建一个新的数组. reverse() Array.reverse(),颠倒数组元素的顺序,返回逆向的数组.注意此方法会修改原来数组元素的位置,而不是返回一个新的数组. sort() sort() 方法将数组中的元素排序并返回排序后的数组.s