RE: RE: problems starting JavaKit

"Saurabh Mukadam" <[email protected]>
Newsgroups gmane.comp.hardware.microcontrollers.tini
Message-ID <001a01c405be$42a2b0e0$4b010a81@saurabh>
Dear Bryan,

We are writing a small socket program (enclosed in mail) in C, which
does the following:

1. opens a socket
2. binds to a local address with any port

bind() function returns error code as 11. We are unable to fix this
problem. Can you please help us.

Source code:

void main()
{
    unsigned char bs;


	unsigned int result;
	unsigned int i;
    struct sockaddr address;
    unsigned char data1[100];
    unsigned char data2[100];
    unsigned int handle1, handle2;

    printf("DS80C400 Initialization \r\n");

    printf("About to individually do all inits...\r\n");
    printf("\r\nAbout to clear XSEG...");
    init_clearXSEG();
    printf("\r\nAbout to copy IVT...");
    init_copyivt();
    printf("\r\nAbout to init redirect table...");
    init_redirect();
    printf("\r\nAbout to clear system RAM...");
    init_clearSystemRAM();
    printf("\r\nAbout to do mm_init...");
    init_mm(RAM_START, RAM_END);
    printf("\r\nAbout to do km_init...");
    init_km();
    printf("\r\nAbout to do ow_init...");
    init_ow(INIT_DIVISOR_14MHZ);
    printf("\r\nAbout to do network_init...");
    init_network();
    //printf("\r\nAbout to do eth_init...");
    //init_eth();
    printf("\r\nAbout to do init_sockets...");
    init_sockets();
    printf("\r\nAbout to do tick_init...");
    init_tick();
    printf("\r\nAbout to do task_genesis...");
    task_genesis(ROM_SAVESIZE);
    printf("\r\nAbout to enable interrupts...");
    init_enableinterrupts();
    printf("\r\n");

    // let's print out a little version information...
    printf("DS80C400 Initialization Library Version %d\r\n",
init_version());
    printf("DS80C400 Scheduler Library Version      %d\r\n",
task_version());

    bs = init_getbootstate();
	if ((bs & INIT_POWERFAIL_RESET) != 0) printf("Boot was a power-fail
reset!\r\n");
	if ((bs & INIT_WATCHDOG_RESET) != 0) printf("Boot was a watchdog
reset!\r\n");
	if ((bs & INIT_CRYSTALFAIL_RESET) != 0) printf("Boot was a crystal-fail
reset!\r\n");

    printf("Hello World!  \r\n");
	//printf("Hello World!  About to call NetBoot...\r\n");
    //init_netboot();

    // we should not see the next statement
    //printf("After the netboot...");

	for (i=0;i<100;i++)
    {
        data1[i] = i;
        data2[i] = i;
    }
    clear_param_buffers();

    do_static();
    network_config();

	for (i=0;i<18;i++)
        address.sin_addr[i] = 0;
  //address.sin_addr[12] = HOST_IP_MSB;
  //address.sin_addr[13] = HOST_IP_2;
  //address.sin_addr[14] = HOST_IP_3;
  //address.sin_addr[15] = HOST_IP_LSB;
  address.sin_port = 0;


	printf("\r\nMaking socket() call 1\r\n");
    handle1 = socket(0, SOCKET_TYPE_STREAM, 0);

	if(handle1 != -1)
	{
		printf("Socket Handle 1 %u\r\n", handle1);

		handle2 = socket(0, SOCKET_TYPE_STREAM, 0);

		if(handle2 != -1)
		{
			printf("Socket Handle 2 %u\r\n", handle2);

			for (i=0;i<18;i++)
		        address.sin_addr[i] = 0;
			 address.sin_port = 0;

			result = bind(handle1,&address, sizeof(address));

			printf("\r\nbind() Failure %u\r\n", result);



			if(result == 0)
			{
				printf("\r\nbind() Succcessful\r\n");


				printf("\r\nEntering critical section\r\n");

				task_entercritsection();   // make sure we don't task swap before we can
get the result out

				printf("\r\nforking\r\n");

				result = task_fork(NORM_PRIORITY, ROM_SAVESIZE);

				if (result==0xFFFF)
				{
					task_leavecritsection();
					printf("Attempt to fork failed\r\n");
					return;
				}

				printf("\r\nfork successful\r\n");

				//else result is 0 for the child process, else it is the child PID
				if (result==0)
				{
					for (i=0;i<18;i++)
						address.sin_addr[i] = 0;
					//address.sin_addr[12] = HOST_IP_MSB;
					//address.sin_addr[13] = HOST_IP_2;
					//address.sin_addr[14] = HOST_IP_3;
					//address.sin_addr[15] = HOST_IP_LSB;
					//address.sin_port = 10;

					if(connect(handle2, &address, sizeof(address)) == 0)
					{
						printf("\r\nconnect() successful\r\n");
						while (1)
						{
							send(handle2, "Hello World", 12, 0);
							task_wait(0, 0, 500);
						}
					}
					else
					{
						printf("\r\nconnect() failure\r\n");
					}


				}
				else
				{

					unsigned int lhandle=0;
					struct sockaddr laddr;

					task_leavecritsection();

					printf("\r\nCalling listen()\r\n");

					if(listen(handle1,2) == 0)
					{
						printf("\r\n Listen Successful\r\n");

						lhandle=accept(handle1,&laddr,sizeof(struct sockaddr));

						if(lhandle != -1)
						{
							printf("\r\naccept() successful\r\n");

							while (1)
							{
								recv(lhandle, data2, 12, 0);
								printf("\r\n%s\r\n",data2);
								task_wait(0, 0, 50);
							}
						}
						else
						{
							printf("\r\naccept() failure\r\n");
						}
					}
					else
					{
						printf("\r\nlisten() failure\r\n");
					}
				}

			}
			else
			{
				printf("\r\nbind() Failure %u\r\n", result);
			}
		}
		else
		{
			printf("\r\nsocket() 2 failure\r\n");
		}
	}
	else
	{
		printf("\r\nsocket() 1 failure\r\n");
	}

    printf("\r\nThe program will now freeze.");
    while(1)
	{
	}
}


Saurabh

-----Original Message-----
From: Bryan Armstrong [mailto:bryan.armstrong-6tN4nzCoH/[email protected]]
Sent: Monday, March 08, 2004 8:29 PM
To: [email protected]
Cc: tini-6tN4nzCoH/[email protected]
Subject: Re: [TINI]RE: problems starting JavaKit


Saurabh Mukadam wrote:
> Board is interface with PC through serial port using only Tx, Rx and Gnd
> line. There is no DTR line used to reset the board. DS80C400 is
> resetted manually when required.

Saurabh,

DTR is required to notify the loader that a binary segment load is complete.

--
--
Bryan Armstrong
bryan.armstrong-6tN4nzCoH/[email protected]

_______________________________________________
TINI mailing list
TINI-6tN4nzCoH/[email protected]
To UNSUBSCRIBE, edit your profile, or see list archives:
http://lists.dalsemi.com/mailman/listinfo/tini
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.