‘壹’ CCS中运行C语言问题
CCS我不是很了解,但是据我多年写程序的经验,程序都是那样,不可能你没调用对话框,它自己弹出一个对话框来.你可以对程序做一下根踪,看看倒底问题是出在哪里了.
估计是你的fscanf调用有误吧.使得CCS在调用fscanf的时候用对话框来输入文件吧.你用这个函数是要从文件中读数吧.不如用fgets()试试.最好用最底层的函数吧.
这个问题不如看看相关的书,介绍CCS的,文件调用那里是怎么回事.
‘贰’ 我在CCS环境下用C函数调用一个线性汇编函数,不知道怎么调用还有就是在C文件中怎么包含汇编的文件谢谢
TI 的CCS软件??
C要调用汇编..首先要 汇编编写的时候 符合C调用规则, 这个首先要去看C语言编译器
同样汇编调用C, 也要先在汇编状态下准备C需要的环境
举个例子TI CCS里面 写LF2407编译器.
在汇编里面 所有的c变量都需要加_ ,,比如 int a; 汇编要调用的名字就是 _a
C语言用R6 R7做堆栈指针等等
‘叁’ ccs集成开发环境工程的搭建到.c文件的添加具体需要哪些步骤
DSP开发: PC机+目标板+仿真器+CCS开发环境
一般是先在CCS开发环境下编写程序(使用C语言、汇编语言或者两者混合)CCS内置软仿真simulator提供了编译,调试,运行功能。其作用主要是检测目标程序运行的正确性和连贯性!但不能够实时查看和控制。
当程序成功运行通过后,通过仿真器(XDS510或者XDS560)与目标板连接,安装仿真器驱动,然后load program到目标板,运行,利用仿真器提供的RTDX可实时查看存储器和寄存器变化!再调试,再运行!
‘肆’ 如何在CCS中建立自己的C语言函数库文件
你说的函数库是指什么,如果是静态动态库的话,你使用ide都有相关的建立向导。
‘伍’ DSP开发环境CCS中,C语言程序的标注与反标注的快捷键分别是什么不甚感激!
你什么版本啊,标注是注释吗,eclipse下的快捷键基本是ccs下都能用,而且可以自己制作注释等template。自己查下。4系列以下不知
‘陆’ CCS软件C语言编程输出SPWM脉宽调制波控制感应电机转速程序算法解读
1、PWM波是控制直流电机的
通俗的说,5V直流电机在5V的情况下肯定速度最快,在0V的情况下肯定不转了
这样电源0~5V就对应了不同的速度
问题是怎么才能实现0~5V的变化呢?
于是就用PWM波控制mos管来给直流电机供电。PWM就是一个矩形波,通过控制高电平和低电平的时间来控制MOS管导通的时间。MOS管在高电平的时候导通,就相当于5V电源直接加到电机上;MOS管在低电平的时候截止,就相当于0V电源加到电机上。
PWM又叫脉宽调制,就是控制高电平占一个周期的比例。而这个PWM波就是控制5V电源加到电机上的时间,从而控制了电机。
2、例程:
#include <reg52.h>
sbit KEY1 = P3^4;
sbit PWM = P1^5;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON ;//定义高电平时间
void delay(unsigned int cnt)
{
while(--cnt);
}
main()
{
unsigned char PWM_Num;//定义档位
TMOD |=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
while(1)
{
if(!KEY1)
{
delay(10000);
if(!KEY1)
{
PWM_Num++;
if(PWM_Num==4)PWM_Num=0;
switch(PWM_Num){
case 0:P0=0x06;PWM_ON=0;break;//高电平时长
case 1:P0=0x5B;PWM_ON=4;break;
case 2:P0=0x4F;PWM_ON=6;break;
case 3:P0=0x66;PWM_ON=8;break;
default:break;
}
}
}
}
}
/********************************/
/* 定时中断 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
PWM = 1; //灯灭
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
PWM = 0;//灯亮
}
‘柒’ 对DSP而言,CCS用C语言编程和汇编编程,二者的效率相差多少
我用的是28XX系列的,不知道经验对你有没有用,因为不同系列的芯片多少有些差别。
TI提供的库已经相当可以了,兼顾易用与效率。我当时做过这样的测试
1. 用IQMATH实现
2. 直接C语言实现
3. C语言优化实现
4. 原生汇编实现
IQMATH的运行周期在1000左右,比方案3快几十个周期,比方案4慢几个周期,方案2是10000多个周期。
另外,因为只是单独测的算法,汇编之所以快是快在寄存器的使用上,操作数可以直接入寄存器,但是考虑到程序其他部分是用C语言编写的话,把操作栈的时间也加上,并不比方案1快。毕竟我对TI的汇编吃的也不透。
在编写上,无疑是方案1提供了最接近C语言风格的实现,几乎不用考虑ISA方面的问题。
另外对于执行效率,我觉得主要考虑三点:
1.分支的使用
CCS对C语言的优化我没做过太多比对。其实单从反汇编的结果看,我接触过的嵌入式开发环境的编译器都能做出很好的优化。但是几乎每个编译器都会在逻辑的优化上有欠缺——它只能对一些显而易见的判断条件进行优化,而在写程序的过程中,我们经常出于易读性的考虑,或者稳定性的考虑,或者其他的考虑加入几乎不会发生的分支,这样的分支判断会消耗一定比率的代码段执行效率,视乎代码段内有用功能的长度而定,越长这个比率越小,越短这个比率越高。
2.一般操作,就是各种赋值操作
在一般的操作上,编译器的优化已经很令人满意了,基本上可以作为编写汇编的范本。我觉得所谓效率能达到90%就是针对这个部分说的。
3.特殊操作,比如对整块内存的操作,或者是浮点运算上。
在一些特殊的操作上,就要看是否有现成的库,或者看硬件是否支持。比如对整块内存操作就别用循环一个字节一个字节的搬了。
以上三点都能考虑到的话,相信执行效率方面已经没有太大的提升空间了。
另外如果你的代码发生在初始化部分,也就是只在系统运行开始的时候运行一次,那么优化不优化其实没有太大的必要,除非你对系统初始化的时间有严格的要求。但是如果你的代码是作为任务要被反复运行的,那就有优化的必要了。
在CCS里有代码消耗时钟周期的统计,如果你觉得某段代码效率低下的话,可以先分段进行消耗时钟周期的计算,这样优化比较有针对性。