Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

ccs problem

Status
Not open for further replies.

ryan.reeve

New Member
The following code is compiled under Borland but in CCS 4.084 I get bulk of errors.
Any clue.
Main c file.
Code:

#include <dev.h>
#include <stdlib.h>
#include <cordic-32bit.h>

void main(void)
{
float val,var,angle=150.0001;

val=sin(angle);
var=cos(angle);
printf("sin %f cos %f \n ", val,var);

}


here is the cordic-32bit.h file.
Code:

//Cordic in 32 bit signed fixed point math
//Function is valid for arguments in range -pi/2 -- pi/2
//for values pi/2--pi: value = half_pi-(theta-half_pi) and similarly for values -pi---pi/2
//
// 1.0 = 1073741824
// 1/k = 0.6072529350088812561694
// pi = 3.1415926536897932384626
//Constants
#define cordic_1K 0x26DD3B6A
#define half_pi 0x6487ED51
#define MUL 1073741824.000000
#define CORDIC_NTAB 32
#define Pi 3.14159265358979323846
#define N 90
int32 cordic_ctab [] = {0x3243F6A8, 0x1DAC6705, 0x0FADBAFC, 0x07F56EA6, 0x03FEAB76, 0x01FFD55B, 0x00FFFAAA, 0x007FFF55, 0x003FFFEA, 0x001FFFFD, 0x000FFFFF, 0x0007FFFF, 0x0003FFFF, 0x0001FFFF, 0x0000FFFF, 0x00007FFF, 0x00003FFF, 0x00001FFF, 0x00000FFF, 0x000007FF, 0x000003FF, 0x000001FF, 0x000000FF, 0x0000007F, 0x0000003F, 0x0000001F, 0x0000000F, 0x00000008, 0x00000004, 0x00000002, 0x00000001, 0x00000000,};

float cordic(int32 theta, int32 *s, int32 *c, int32 n)
{
int32 k, d, tx, ty, tz;
int32 x=cordic_1K,y=0,z=theta;
n = (n>CORDIC_NTAB) ? CORDIC_NTAB : n;
for (k=0; k<n; ++k)
{
d = z>>31;
//get sign. for other architectures, you might want to use the more portable version
//d = z>=0 ? 0 : -1;
tx = x - (((y>>k) ^ d) - d);
ty = y + (((x>>k) ^ d) - d);
tz = z - ((cordic_ctab[k] ^ d) - d);
x = tx; y = ty; z = tz;
}
*c = x; *s = y;
return *s/MUL;
}
float cos(float angle)
{
float res;
int32 *s, *c;
angle=N-angle;
angle=angle*Pi/180;
res=cordic((angle*MUL), &s ,&c,32);
return res;
}
float sin(float angle)
{
float res;
int32 *s, *c;
if (angle>90)
angle=180-angle;
angle=angle*Pi/180;
res=cordic((angle*MUL), &s ,&c,32);
return res;
}

dev.h file is device related config file i.e
Code:

#include <16F877A.h>
#device *=16
#device ICD=TRUE
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
#FUSES
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)

thnx...
 
hi
i'm not c expert but when you call function cordic the argument theta should be type of int32, theta<=angle*MUL , angle and MUL both float so result should float don't you want to do any type cast for this calculation

and i think ccs c is not fully compatible with ANSI C
 
Last edited:
Status
Not open for further replies.

New Articles From Microcontroller Tips

Back
Top