View previous topic :: View next topic |
Author |
Message |
jmoliere
Joined: 31 Oct 2007 Posts: 4
|
batch building with CCS... |
Posted: Wed Oct 31, 2007 10:02 pm |
|
|
Hello,
I would like to create a batch file where I pass in different parameters #param=value to build different hex files. This will allow me to automate numerous builds.
The problem is, when I call ccsc.exe numerous times from the batch file (using different parameters each time), only the 1st hex file gets built but not the rest.
How does one build multiple output files with ccsc? The solution is obvious using gcc, g++, cl, but not with ccsc.
Thanks! |
|
|
wetodd Guest
|
|
Posted: Thu Nov 01, 2007 3:50 pm |
|
|
I am doing the exact same thing. With ccsc.exe, the .hex file is named the same as the .c file. So you are creating multiple hex files, but each subsequent file overwrites the previous one. I created a separate program to write the original file to a new file with a different name. My project needs unique IDs for each unit, so my program asks the user for the starting ID and number of files to generate. Then in a for loop, the program creates the specified number of files, and adds the compile command to a batch file. |
|
|
jmoliere
Joined: 31 Oct 2007 Posts: 4
|
|
Posted: Thu Nov 01, 2007 8:32 pm |
|
|
wetodd,
I'm pretty sure I'm not creating the same file over and over because the time stamp on the 'last updated time' of the file doesn't change. Also, when I apply the commands one at a time on the command line, the proper hex files are created. Executing these commands in a batch file do not work.
Good day!
jmoliere |
|
|
Wayne_
Joined: 10 Oct 2007 Posts: 681
|
|
Posted: Fri Nov 02, 2007 6:20 am |
|
|
Could you post the batch file.
Issues with doing this:-
1. The compiler will only re-compile if a source file has changed.
This can be overridden in the GUI compiler by clicking BuildAll but I don't know how you do this with the command line interface. Help is no help here.
2. You need to specify a different output file for each build.
I again could not find out how to do this with the command line -? help info.
Have fun. |
|
|
jmoliere
Joined: 31 Oct 2007 Posts: 4
|
|
Posted: Fri Nov 02, 2007 4:53 pm |
|
|
Here is a build script that I've tried to get things to work. I used the Ch interpreter ( the C interpreter ) to make things easier for me.... which it's not.
Basically I try to recursively call this same script over and over until all the files are built.
I named the file below test.ch and to run the program, type:
test.ch 0 <enter>
-----------------------------------------
int main(int argc, char *argv[])
{
int i=0;
char data[100];
//rm TestPICC.o
int num=0;
if (argc == 2)
{
num = atoi(argv[1]);
sprintf(&data[0], "start /MAX ccsc #TUBE_NUMBER=%d +CC +EXPORT -D +EA +Y9 +P +stdout +DF +O8OUT TestPICC.c", num);
printf("executing command: %s\r\n", data);
system(data);
num++;
if (num < 3)
{
//let the previous process finish and then start this process.
sleep(30);
sprintf(data, "start /MAX test.ch %d\r\n", num);
printf("sending: %s\n", data);
system(data);
data[0] = 0;
}
}
printf("ending with num: %d\n", num);
}
-------------------------------------------------------------------
The code below is TestPICC.c and I ripped a bunch of the
code out to make things easier to read.
-----------------------------------------------
#EXPORT( HEX, FILE=TUBE_NUMBER.hex)
#include "TestPICC.h"
#fuses HS,NOWDT,NOPUT,NOBROWNOUT,LVP,NOWRT,NOPROTECT
#use delay(clock=20000000)
#use FAST_IO(D)
#use FAST_IO(C)
#use FAST_IO(B)
#use FAST_IO(A)
#use FAST_IO(E)
#define WR PIN_B2
#define RD PIN_B1
#define SND PIN_E1
#define TXE PIN_E2
#define RXF PIN_B4
#byte PORTD = 0x08
void main()
{
long tubeNumber = TUBE_NUMBER;
printf("got number %d\n", tubeNumber);
}
-------------------------------------------------- |
|
|
jmoliere
Joined: 31 Oct 2007 Posts: 4
|
|
Posted: Fri Nov 02, 2007 5:26 pm |
|
|
Wayne_ wrote: | Could you post the batch file.
Issues with doing this:-
1. The compiler will only re-compile if a source file has changed.
This can be overridden in the GUI compiler by clicking BuildAll but I don't know how you do this with the command line interface. Help is no help here.
2. You need to specify a different output file for each build.
I again could not find out how to do this with the command line -? help info.
Have fun. |
I also tried....
filename: test.ch
-----------------------------------------------
int main(int argc, char *argv[])
{
for (;i<4;i++)
{
sprintf(&data[0], "start /MIN ccsc #TUBE_NUMBER=%d +CC +EXPORT -D +EA +Y9 +PE +stdout +DF +O8OUT TestPICC.c", i);
printf("start %s\r\n", data);
//make the command line call
system(data);
//sleep(5);
//rm TestPICC.o TestPICC.cod TestPICC.cof TestPICC.esym TestPICC.lst TestPICC.osym TestPICC.sta TestPICC.sym TestPICC.tre
data[0]=0;
}
}
---------------------------------------------------------
...but of course, anything as simple and dumb as the code above would never work! |
|
|
Wayne_
Joined: 10 Oct 2007 Posts: 681
|
|
Posted: Mon Nov 05, 2007 2:35 am |
|
|
First of all these are not batch files but c programs.
I have not come accross the Ch interpreter!
Your problem MAY be that each system call starts a new thread.
This would mean that the system call to run the compiler returns straight away and the compiler runs in the background. You then call your program again to do the next build. Again this returns imediately so you current thread can terminate.
The second one is correct BUT if the compiler uses the same filenames for each build (which it will do) then your compile threads will have a problem!
Try removing the "start /MAX" from the "ccsc" command line string.
You program will then wait until each build has completed before moving on to the next.
This may help things. |
|
|
|