dsp调试常见问题


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,然后进入程序的入口。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值