How to resolve error 'Not enough memory on the target to process the packet' while working on TI C2000 in external mode?

56 views (last 30 days)
I want to make a real-time trace of several signals in my model while running with a sample rate of 10 kHz on a TI C2000 ( ) in external mode. My problem is that the real-time trace doesn’t behave as expected, although I have set the heap_size to 0x4000.
  • Setting the duration in the “External Signal & Triggering” window of my model to 1000, works fine and I receive 1000 consecutive data points.
  • Setting the duration to 2000, produces the error message “Not enough memory on the target to process the packet: EXT_SELECT_SIGNALS “ in the Diagnostic Viewer when I press the “Arm Trigger” button in the “External Mode Control Panel” and no values are transferred from the C2000 to the host-PC. Note that I cannot reduce the sample rate as the controller must work in real-time

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 7 Oct 2021
Edited: MathWorks Support Team on 7 Oct 2021
The following documentation page provides you with a good overview on the topic:
You have encountered two limitations with your application:
  1. Increasing the “Duration” allows the capture of large real-time buffers. These buffers use heap section to allocate memory. A high value of “Duration” may result in Not enough memory on the target to process the packet warning, and consequently cause no data to be uploaded from the target to the host computer.
  2. You are requesting for a higher heap size by using heap_size=0x4000. With this change the section that stores the heap section (.sysmem or .esysmem) is not big enough to satisfy your request, even though your target has sufficient memory.
To resolve the underlying problem, you need to provide more heap space to satisfy your request by adding more sections to the heap area (.sysmem/.esysmem) in your .cmd file. This can be done, by editing the linker file present in the location "matlab\toolbox\target\supportpackages\tic2000_concerto\src\c28335.cmd".When you open the .cmd file, you will see something like the following:
.sysmem: > RAML0L3, PAGE = 1
.esysmem: > RAML0L3, PAGE = 1
if RAMM1 is a section that has more free memory, then change the .cmd file to 
.sysmem: > RAML0L3 | RAMM1 , PAGE = 1
.esysmem: > RAML0L3 | RAMM1 , PAGE = 1
The OR ( '|' ) operation will allow heap to request memory from RAMM1, where RAMM1 is just an example. Please play around to figure out the memory section that is underutilized by perusing your generated .map file. Please note that the generated .map file gives no implicit information on the free memory.

    Sign in to comment.

    More Answers (0)



    No release entered yet.

    Community Treasure Hunt

    Find the treasures in MATLAB Central and discover how the community can help you!

    Start Hunting!