forked from nuttx/nuttx-update
Finished C5471 Integration
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@48 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
31c51190dd
commit
9a90482b10
8 changed files with 78 additions and 64 deletions
5
ChangeLog
Normal file
5
ChangeLog
Normal file
|
@ -0,0 +1,5 @@
|
|||
0.1.0 2007-03-09 Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
|
||||
* Initial Release
|
||||
* Support for Linux user mode simulation and TI
|
||||
TMS320C5471 (Arm7) provided
|
|
@ -28,8 +28,8 @@
|
|||
NuttX operates on the ARM7 of this dual core processor.
|
||||
This port uses the <a href="http://www.spectrumdigital.com/">Spectrum Digital</a>
|
||||
evaluation board with a GNU arm-elf toolchain*.
|
||||
This port is in progress and partially functional (However,
|
||||
my board is dead at the moment so it will be awhile before I fix it)</li>
|
||||
This port is complete, verified, and included in the initial NuttX
|
||||
release.</li>
|
||||
<li><b>8051 Microcontroller</b>.
|
||||
This port uses the <a href="http://www.pjrc.com/">PJRC</a> 87C52 development system
|
||||
and the <a href="http://sdcc.sourceforge.net/">SDCC</a> toolchain.
|
||||
|
@ -43,17 +43,18 @@ is available that be used to build a NuttX-compatible arm-elf toolchain.</blockq
|
|||
|
||||
<h1>Memory Footprint</h1>
|
||||
|
||||
<p>Details to be provided</p>
|
||||
|
||||
<p>
|
||||
I have a complete build for an ARM7 target that includes most of the OS
|
||||
features and a broad range of OS tests.
|
||||
That builds to an executable that requires about 85Kb for .text, .data., and .bss.
|
||||
<p><b>C5471 (Arm7)</b>
|
||||
The build for this ARM7 target that includes most of the OS features and
|
||||
a broad range of OS tests. The size of this executable as given by the
|
||||
Linux <tt>size</tt> command is:
|
||||
</p>
|
||||
<p>
|
||||
I have a stripped down OS test for the 8051 target that requires only
|
||||
18Kb. A substantial effort was required to get to this size
|
||||
(see <a href="codesize-070301.xls">spreadsheet</a> for details).
|
||||
<pre>
|
||||
text data bss dec hex filename
|
||||
53272 428 3568 57268 dfb4 nuttx
|
||||
</pre>
|
||||
<p><b>87C52</b>
|
||||
A reduced functionality OS test for the 8051 target requires only
|
||||
about 18Kb (see <a href="codesize-070301.xls">spreadsheet</a> for details).
|
||||
</p>
|
||||
|
||||
<h1>Licensing</h1>
|
||||
|
|
|
@ -27,7 +27,7 @@ Gregory Nutt
|
|||
<H1>1.0 <A NAME="Introduction">Introduction</A></H1>
|
||||
|
||||
<P>
|
||||
This user's manual is divided into five sections:
|
||||
This user's manual is divided into three sections:
|
||||
<UL>
|
||||
<LI><B>Section 1.0, <A HREF="#Introduction">Introduction</A></B>:
|
||||
This section provides an overview of the Nuttx user's manual.
|
||||
|
@ -48,8 +48,6 @@ into several paragraphs that describe different groups of OS interfaces:
|
|||
<LI><B>Section 3.0, <A HREF="#Data_Structures">OS Data Structures</A></B>:
|
||||
This section documents the data structures that are used at the Nuttx
|
||||
interface.
|
||||
<LI><B>Section 4.0, <A HREF="#Problems">Known Problems</A></B>. This section
|
||||
lists known problems in the latest release of Nuttx.
|
||||
</UL>
|
||||
<HR>
|
||||
|
||||
|
@ -4113,28 +4111,5 @@ notify a task when a message is available on a queue.
|
|||
have to do some redesign.
|
||||
</p>
|
||||
|
||||
<HR>
|
||||
|
||||
<H1>4.0 <A NAME="Problems">Known Problems</A></H1>
|
||||
|
||||
<P>
|
||||
This section documents know problems with Nuttx at the time
|
||||
of this writing.
|
||||
<P>
|
||||
<HR>
|
||||
<B>Problem</B>:
|
||||
There is a problem with the unblock logic in os_signal.c when message queue
|
||||
becomes not-empty -- sig_mqnotempty() calls sig_received().
|
||||
sig_received() relies on task_state == TSTATE_WAIT_SIG and will ignore
|
||||
tasks that are waiting on a message queue to become non-empty.
|
||||
<P>
|
||||
<B>Priority</B>: <B>LOW</B>. If a task is blocked a waiting for a message
|
||||
queue to become non-empty, it will be re-started anyway.
|
||||
<HR>
|
||||
|
||||
<B>Problem</B>: task_restart won't restart a running task
|
||||
<P>
|
||||
<B>Priority</B>: <B>LOW</B>.
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
|
12
ReleaseNotes
Normal file
12
ReleaseNotes
Normal file
|
@ -0,0 +1,12 @@
|
|||
Nuttx-0.1.0
|
||||
^^^^^^^^^^^
|
||||
|
||||
This is the initial. This initial includes the complete NuttX RTOS
|
||||
with support for the Linux user mode simulation and the TI TMS320C5471
|
||||
(Arm7) processor. Partial support for the 87C52 is included.
|
||||
|
||||
This release has been verified on both the Linux user-mode and C5471
|
||||
platforms using the test program under examples/ostest. Test results
|
||||
for the C5471 can be found in arch/c5471/doc/test-results.txt.
|
||||
|
||||
This tarball contains a complete CVS snapshot from March 9,2007.
|
|
@ -51,7 +51,7 @@
|
|||
|
||||
#undef CONFIG_SUPPRESS_INTERRUPTS /* Do not enable interrupts */
|
||||
#undef CONFIG_SUPPRESS_TIMER_INTS /* No timer */
|
||||
#define CONFIG_SUPPRESS_SERIAL_INTS 1 /* Console will poll */
|
||||
#undef CONFIG_SUPPRESS_SERIAL_INTS /* Console will poll */
|
||||
#undef CONFIG_SUPPRESS_UART_CONFIG /* Do not reconfig UART */
|
||||
#undef CONFIG_DUMP_ON_EXIT /* Dumpt task state on exit */
|
||||
|
||||
|
|
|
@ -79,10 +79,11 @@ struct uart_regs_s
|
|||
|
||||
struct uart_buffer_s
|
||||
{
|
||||
int head;
|
||||
int tail;
|
||||
int size;
|
||||
char *buffer;
|
||||
sem_t sem; /* Used to control exclusive access to the buffer */
|
||||
sint16 head; /* Index to the head [IN] index in the buffer */
|
||||
sint16 tail; /* Index to the tail [OUT] index in the buffer */
|
||||
sint16 size; /* The allocated size of the buffer */
|
||||
char *buffer; /* Pointer to the allocated buffer memory */
|
||||
};
|
||||
|
||||
struct up_dev_s
|
||||
|
@ -608,6 +609,7 @@ static void up_putxmitchar(up_dev_t *dev, int ch)
|
|||
}
|
||||
else
|
||||
{
|
||||
#if defined(CONFIG_SUPPRESS_INTERRUPTS) || defined(CONFIG_SUPPRESS_SERIAL_INTS)
|
||||
/* Transfer some characters with interrupts disabled */
|
||||
|
||||
up_xmitchars(dev);
|
||||
|
@ -621,20 +623,23 @@ static void up_putxmitchar(up_dev_t *dev, int ch)
|
|||
{
|
||||
/* Still no space */
|
||||
|
||||
#if defined(CONFIG_SUPPRESS_INTERRUPTS) || defined(CONFIG_SUPPRESS_SERIAL_INTS)
|
||||
up_waittxfifonotfull(dev);
|
||||
#else
|
||||
dev->xmitwaiting = TRUE;
|
||||
|
||||
/* Wait for some characters to be sent from the buffer
|
||||
* with the TX interrupt disabled.
|
||||
*/
|
||||
|
||||
up_enabletxint(dev);
|
||||
up_takesem(&dev->xmitsem);
|
||||
up_disabletxint(dev);
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
/* Inform the interrupt level logic that we are waiting */
|
||||
|
||||
dev->xmitwaiting = TRUE;
|
||||
|
||||
/* Wait for some characters to be sent from the buffer
|
||||
* with the TX interrupt enabled. When the TX interrupt
|
||||
* is enabled, up_xmitchars should execute and remove
|
||||
* some of the data from the TX buffer.
|
||||
*/
|
||||
|
||||
up_enabletxint(dev);
|
||||
up_takesem(&dev->xmitsem);
|
||||
up_disabletxint(dev);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -805,6 +810,10 @@ static ssize_t up_write(struct file *filep, const char *buffer, size_t buflen)
|
|||
up_dev_t *dev = inode->i_private;
|
||||
ssize_t ret = buflen;
|
||||
|
||||
/* Only one user can be accessing dev->xmit.head at once */
|
||||
|
||||
up_takesem(&dev->xmit.sem);
|
||||
|
||||
/* Loop while we still have data to copy to the transmit buffer.
|
||||
* we add data to the head of the buffer; up_xmitchars takes the
|
||||
* data from the end of the buffer.
|
||||
|
@ -829,13 +838,14 @@ static ssize_t up_write(struct file *filep, const char *buffer, size_t buflen)
|
|||
|
||||
if (dev->xmit.head != dev->xmit.tail)
|
||||
{
|
||||
#if defined(CONFIG_SUPPRESS_INTERRUPTS) || defined(CONFIG_SUPPRESS_SERIAL_INTS)
|
||||
up_xmitchars(dev);
|
||||
if (dev->xmit.head != dev->xmit.tail)
|
||||
{
|
||||
up_enabletxint(dev);
|
||||
}
|
||||
#else
|
||||
up_enabletxint(dev);
|
||||
#endif
|
||||
}
|
||||
|
||||
up_givesem(&dev->xmit.sem);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -849,6 +859,10 @@ static ssize_t up_read(struct file *filep, char *buffer, size_t buflen)
|
|||
up_dev_t *dev = inode->i_private;
|
||||
ssize_t ret = buflen;
|
||||
|
||||
/* Only one user can be accessing dev->recv.tail at once */
|
||||
|
||||
up_takesem(&dev->recv.sem);
|
||||
|
||||
/* Loop while we still have data to copy to the receive buffer.
|
||||
* we add data to the head of the buffer; up_xmitchars takes the
|
||||
* data from the end of the buffer.
|
||||
|
@ -862,7 +876,7 @@ static ssize_t up_read(struct file *filep, char *buffer, size_t buflen)
|
|||
*buffer++ = dev->recv.buffer[dev->recv.tail];
|
||||
buflen--;
|
||||
|
||||
if (++dev->recv.tail >= dev->recv.size)
|
||||
if (++(dev->recv.tail) >= dev->recv.size)
|
||||
{
|
||||
dev->recv.tail = 0;
|
||||
}
|
||||
|
@ -881,7 +895,7 @@ static ssize_t up_read(struct file *filep, char *buffer, size_t buflen)
|
|||
}
|
||||
|
||||
up_enablerxint(dev);
|
||||
|
||||
up_takesem(&dev->recv.sem);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1068,8 +1082,11 @@ static void up_devinit(up_dev_t *dev,
|
|||
* statically initialized.
|
||||
*/
|
||||
|
||||
sem_init(&dev->xmit.sem, 0, 1);
|
||||
dev->xmit.size = txbufsize;
|
||||
dev->xmit.buffer = txbuffer;
|
||||
|
||||
sem_init(&dev->recv.sem, 0, 1);
|
||||
dev->recv.size = rxbufsize;
|
||||
dev->recv.buffer = rxbuffer;
|
||||
|
||||
|
|
|
@ -216,16 +216,19 @@ void sighand_test(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
printf("sighand_test: Started waiter_main pid=%d\n" , waiterpid);
|
||||
printf("sighand_test: Started waiter_main pid=%d\n", waiterpid);
|
||||
}
|
||||
|
||||
/* Wait a bit */
|
||||
|
||||
fflush(stdout);
|
||||
usleep(500*1000);
|
||||
sleep(2);
|
||||
|
||||
/* Then signal the waiter thread. */
|
||||
|
||||
printf("sighand_test: Signaling pid=%d with signo=%d sigvalue=%d\n",
|
||||
waiterpid, WAKEUP_SIGNAL, SIGVALUE_INT);
|
||||
|
||||
sigvalue.sival_int = SIGVALUE_INT;
|
||||
#ifdef CONFIG_CAN_PASS_STRUCTS
|
||||
status = sigqueue(waiterpid, WAKEUP_SIGNAL, sigvalue);
|
||||
|
@ -241,7 +244,7 @@ void sighand_test(void)
|
|||
/* Wait a bit */
|
||||
|
||||
fflush(stdout);
|
||||
usleep(500*1000);
|
||||
sleep(2);
|
||||
|
||||
/* Then check the result */
|
||||
|
||||
|
|
|
@ -161,6 +161,7 @@ void timedwait_test(void)
|
|||
}
|
||||
|
||||
printf("timedwait_test: Joining\n");
|
||||
fflush(stdout);
|
||||
status = pthread_join(waiter, &result);
|
||||
if (status != 0)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue