Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Multiple looping

Reply
Thread Tools

Multiple looping

 
 
john
Guest
Posts: n/a
 
      08-03-2005

Hello,

I am trying to send 2^19 data to USB2.0. I am reading the file
"all_sines" and loading it into
an array called "string1". Then, in a for loop I copied it into the USB
data array "Data_outBuffer". The USB can
carry only "32767" bytes at one time. The way I am doing right now
requires 16 for loops to send the
2^19 amount of data. ( 32767 * 16 = 2^19). My USB function SetSignals
can only carry "32767 bytes at one time".

I am looking for optimize code solution. like one while loop and the
other for loop.
Thanks
Regards,
John



#define COUNT_VAR 32767

int main(int argc, char* argv[])

{

FILE *infile;
unsigned char string1[COUNT_VAR+1];
unsigned char DataOutBuffer[COUNT_VAR -1];
int ReturnVal;
int x;


if ( (infile=fopen("C:\\C\\all_sines.bin","rb")) != NULL )

{
fread ( string1,sizeof( char), COUNT_VAR, infile );
}

else

printf( "Problem opening the file\n" );

for( x=0; x <= COUNT_VAR-1 ; x++ )

{

DataOutBuffer[x]=string1[x];
printf("value =%d %d\n",x,DataOutBuffer[x] );

}

SetSignals (PodNumber, 0xFF /* Don't Care */, COUNT_VAR /*Max.
Length=32767*/, DataOutBuffer); // USB Command

}/*main*/

 
Reply With Quote
 
 
 
 
Jay Nabonne
Guest
Posts: n/a
 
      08-03-2005
On Wed, 03 Aug 2005 14:24:18 -0700, john wrote:

>
> Hello,
>
> I am trying to send 2^19 data to USB2.0. I am reading the file
> "all_sines" and loading it into
> an array called "string1". Then, in a for loop I copied it into the USB
> data array "Data_outBuffer". The USB can
> carry only "32767" bytes at one time. The way I am doing right now
> requires 16 for loops to send the
> 2^19 amount of data. ( 32767 * 16 = 2^19). My USB function SetSignals
> can only carry "32767 bytes at one time".
>


How about:

#define MAX_SEND 32767

int main(int argc, char* argv[])
{
FILE *infile;
int x;

if ( (infile=fopen("C:\\C\\all_sines.bin","rb")) != NULL )
{
// Loop until all data has been sent.
for (;
{
unsigned char buffer[MAX_SEND];
// Read up to MAX_SEND bytes.
int bytes = fread(buffer, sizeof(unsigned char), MAX_SEND, infile);
// Make sure we got some data.
if (bytes == 0)
break; // error or eof. use ferror if you care.
// Send the data.
SetSignals(PodNumber, 0xFF, bytes, buffer); // USB Command
}
}
else
printf( "Problem opening the file\n" );
}

- Jay
 
Reply With Quote
 
 
 
 
john
Guest
Posts: n/a
 
      08-04-2005
Hello,

Thanks for the reply! But this will be infinite loop. I want my loops
to run ( 16 * 32767 ) times. The problem is that how can I keep the
track of my "string1" array. for example I tried to the following thing

y=0;
x=0;
while ( y<17)
{
for (; x< COUNT_VAR-1;x++)
{
DataOutBuffer[x]=string1[x];
}
y=y+1;
x=x+1;
Setsignals (PodNumber,0xFF;COUNT_VAR,DataOutBuffer);
}

Now, if 'x' gets to 32767 which is also the "COUNT_VAR" then the "for
loop" will never execute again , it will just run once. My USB function
can only carry "32767" bytes and I need to send 2^19 bytes out.
Please adivce!

Thanks
Regards,
John







Jay Nabonne wrote:
> On Wed, 03 Aug 2005 14:24:18 -0700, john wrote:
>
> >
> > Hello,
> >
> > I am trying to send 2^19 data to USB2.0. I am reading the file
> > "all_sines" and loading it into
> > an array called "string1". Then, in a for loop I copied it into the USB
> > data array "Data_outBuffer". The USB can
> > carry only "32767" bytes at one time. The way I am doing right now
> > requires 16 for loops to send the
> > 2^19 amount of data. ( 32767 * 16 = 2^19). My USB function SetSignals
> > can only carry "32767 bytes at one time".
> >

>
> How about:
>
> #define MAX_SEND 32767
>
> int main(int argc, char* argv[])
> {
> FILE *infile;
> int x;
>
> if ( (infile=fopen("C:\\C\\all_sines.bin","rb")) != NULL )
> {
> // Loop until all data has been sent.
> for (;
> {
> unsigned char buffer[MAX_SEND];
> // Read up to MAX_SEND bytes.
> int bytes = fread(buffer, sizeof(unsigned char), MAX_SEND, infile);
> // Make sure we got some data.
> if (bytes == 0)
> break; // error or eof. use ferror if you care.
> // Send the data.
> SetSignals(PodNumber, 0xFF, bytes, buffer); // USB Command
> }
> }
> else
> printf( "Problem opening the file\n" );
> }
>
> - Jay


 
Reply With Quote
 
john
Guest
Posts: n/a
 
      08-04-2005
Hello,

Thanks for the reply! But this will be infinite loop. I want my loops
to run ( 16 * 32767 ) times. The problem is that how can I keep the
track of my "string1" array. for example I tried to the following thing

y=0;
x=0;
while ( y<17)
{
for (; x< COUNT_VAR-1;x++)
{
DataOutBuffer[x]=string1[x];
}
y=y+1;
x=x+1;
Setsignals (PodNumber,0xFF;COUNT_VAR,DataOutBuffer);
}

Now, if 'x' gets to 32767 which is also the "COUNT_VAR" then the "for
loop" will never execute again , it will just run once. My USB function
can only carry "32767" bytes and I need to send 2^19 bytes out.
Please adivce!

Thanks
Regards,
John

 
Reply With Quote
 
Jay Nabonne
Guest
Posts: n/a
 
      08-04-2005
On Thu, 04 Aug 2005 09:05:29 -0700, john wrote:

> Hello,
>
> Thanks for the reply! But this will be infinite loop.


Only if the file is infinitely long. When the fread reaches end-of-file,
it will break out of the loop. By using the eof condition, you don't need
to hard-code it in your code. The code I provided also doesn't require the
source data to be a multiple of 32767.

I also didn't understand the need to copy the data to a separate buffer in
order to send it, but I assume it's needed for some reason, given your
tenacity in keeping it.

> I want my loops
> to run ( 16 * 32767 ) times. The problem is that how can I keep the
> track of my "string1" array. for example I tried to the following thing
>
> y=0;
> x=0;
> while ( y<17)
> {
> for (; x< COUNT_VAR-1;x++)
> {
> DataOutBuffer[x]=string1[x];
> }
> y=y+1;
> x=x+1;
> Setsignals (PodNumber,0xFF;COUNT_VAR,DataOutBuffer);
> }
>
> Now, if 'x' gets to 32767 which is also the "COUNT_VAR" then the "for
> loop" will never execute again , it will just run once. My USB function
> can only carry "32767" bytes and I need to send 2^19 bytes out.


Keep in mind: the buffer you're reading into is only COUNT_VAR bytes long.
You're not reading the entire file into it. So you're going to need to do
multiple reads in order to copy all the data.

> Please adivce!
>


Following your loop above:

for (int x = 0; x < 17; ++x)
{
// Read COUNT_VAR bytes into the source string.
fread(string1, sizeof(unsigned char), COUNT_VAR, infile);
// Copy to the data output buffer.
memcpy(DataOutBuffer, string1, COUNT_VAR);
// Send the data.
Setsignals (PodNumber,0xFF;COUNT_VAR,DataOutBuffer);
}

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
looping in array vs looping in a dic giuseppe.amatulli@gmail.com Python 5 09-20-2012 11:58 PM
help with looping, re.search, multiple indexing Lance Hoffmeyer Python 1 02-16-2007 10:21 PM
Multiple looping john C Programming 5 08-05-2005 12:04 PM
Perl telnet looping problem CJ Perl 0 03-21-2005 09:06 PM
looping/incrementing problem... Mothra Perl 3 12-10-2003 02:01 AM



Advertisments