DSP

dsp调试常见问题

2019-07-13 09:50发布

 1、 function "****" declared implicitly? 函数没有声明。 执行一个a.variable was set but never used? 如果对于某些变量,只是定义并赋值,而没有做其他使用,有些编译器就会认为变量没有使用。 数时,a.c文件起始要有函数声明,有两种方式,一种是直接声明,另一种是包含头文件a.h和b.h,并在b.h或者a.h头文件中声明。需要注意,如果a.h和b.h头文件中没有直接声明,而在b.c文件中声明此函数,那么在b.c文件中可以使用此函数,在a.c文件中,此函数没有声明,此函数还是不能用在a.c文件中。 这种情况经常出现,类似的情况还有数据类型没有定义。 2、 unresolved symble,first referenced? 原因是在前面没有定义,就直接引用。 3、怎么将variable was set but never used? 如果对于某些变量,只是定义并赋值,而没有做其他使用,有些编译器就会认为变量没有使用。 文件放在一起,另一种方法右击工程,add filesc文件链接进去或者复制进去都可以。 4、不能单步调试的原因? 将properties里面的build的optimization关掉即可,单步调试后程序就会进入子函数。因为一旦将程序优化后,虽说功能没有什么变化,但是行数结构变化了,单步调试会乱跳。 5、ariable was set but never used? 如果对于某些变量,只是定义并赋值,而没有做其他使用,有些编译器就会认为变量没有使用。 6、data: 8,这种格式是什么意思? 这是位字段的定义,并不是表示data是一个uint16的数据,而是表示data在这个结构体里占据8位。这是嵌入式程序里面所特有的,对资源的应用更加细化。 7、如果一个变量只在一个函数中使用,该如何定义它? 全局变量和局部变量的区别在于,一个在函数外定义一个在函数内定义。如果一个源文件中包含有a函数和b函数,在a函数里面定义的变量只能在a函数中使用,而不能在b函数中使用。 8、为什么dsp中的数组CAN_HEX_BUFFER[5][37]没有初始化时,是一些不确定的数值? 当全局变量或者静态变量没有初始化时,标准c规定变量值初始化为0,但从效率出发,dsp规定:没有显示初始化的,仍保持未初始化状态。详细说来,全局变量和静态变量放在段.ebss中,需要显式初始化的量放在段.cinit,当dsp上电时,系统初始化函数将自动调用段.cinit的值来初始化段.ebss,对没有显式定义初始化值的,则不初始化,这样减少了存储空间和初始化运行时间。9、把该分开的分开,把该合并的合并,这句话应该怎么理解?对于嵌入式开发而言,应该将软件分为两类,一类是与硬件有关的,另一类是与硬件无关的。这就是说,鼓励程序将驱动和算法实现分开编写。例如,不要试图在一个模块内既完成spwm的算法,又完成spwm的硬件输出。10、codestart.asm这个东西到底起什么作用?这是退出boot mode后,第一个要执行的代码。_c_init00c环境的设置,之后再进入main()。Codestart.asm会将程序执行过程指向_c_init00_c_init00会初始化全局和静态变量,完成后随后进入主函数main()。 ccs环境中,默认条件下,当load program时,-e linker会记住程序的入口地址,程序会停在_c_init00的开始处。当点击resume时,执行_c_init00,然后进入程序的入口。