Hi Chris
I never realized the double use of the
ucPush in
fnSendHTTP_windows().
However the result is correct. The
ucPush passed to the function is used as flag when sending the first TCP frame and, if there are no more frames to be windowed, that was it.
When following frames can be windowed, the
ucPush is a local one in the inner loop.
In this case I think that the first variable can be reused and then there is no need to declare it in the inner loop at all. I will make this change and verify it ready for the next release.
It looks as though Interniche have done good work on optimizing the LPC23XX interface to achieve optimum throughput.
Unfortunately the LPC23XX project is not a good one to measure the uTasker by since it doesn't have a huge user community and so only little time is invested (in comparison) in its peripheral set. It is also lacking in various peripherals and no DMA has been used on its serial peripherals due to the fact that DMA RAM is restricted to a certain memory range and would require a special solution. See the following for design notes about such things:
http://www.utasker.com/forum/index.php?topic=109.0http://www.utasker.com/forum/index.php?topic=136.0http://www.utasker.com/forum/index.php?topic=128.0Specifically I found the following notes (not in the forum) about the DMA:
The LPC23XX contains a dual channel general purpose DMA controller. The controller is highly configurable and supports functions such as converting between little and big-endian memories as well as gather or scatter (using linked lists so that memory doesn’t have to be contiguous).
However the DMA controller doesn’t support UART transfers – it supports SD/MMC, two SSP and I2S interfaces. In addition it doesn’t support all internal memory but rather only the 8k USB memory range (0x7fd00000..0x7fd01fff). It does however support some external memory banks when the device has an external memory interface and external memory is available.
Since the most useful DMA operations in the uTasker project are for memory/memory transfers – uMemcpy() with DMA support and UART transmission, the DMA controller was found not to be very useful. Therefore its implementation has been left out for the time being.
Generally peripherals with DMA support will have an option (usually a define to enable the code and a parameter to switch to the DMA mode). The same is true when double buffering is available (Coldfire has probably best support including DMA based memcpy())
The SPI in the LPC23XX supports only SPI FLASH for file system or other use so there is no generic SPI driver.
Presently there is no USB support on the LPC23X (it is available for Coldfire, SAM7X and will be available in the next Luminary Micro service pack - LP23XX follows next...).
In the LPC23XX development project I2C has been added and also a port interrupt driver (allowing up to 46 different user interrupt routines to be entered, each reacting to an individual port bit change of the specified polarities).
The priority is for driver interface compatibility and in some cases this will lead to less optimum absolute performance in a single point when compared to a different solution. However across the board I would expect the complete project to still collect enough points to be considered a worthy choice for real projects. Also try out the uTasker simulator - this is possibly its biggest plus point!!
Regards
Mark