====== Making Assumptions About Memory Types ====== ---- ==== What is it: ==== Assuming that DMA structures can be declared as globals or can be declared on the stack. ==== Why it's bad: ==== In future hardware, the DMA engine may not have access to the memory used to hold globals and the stack. ==== What to do ==== Always allocate structures from the appropriate kind of memory. ===== Example and Discussion ===== There will probably come a day when stack space, globals, and code reside in CPU-only memory, providing vastly improved performance. This memory will probably not be given DMA access, which will cause problems for objects that need this service. Particularly at risk are CCBs and audio buffers. Always allocate the memory for these structures by using ''%%AllocMem()%%'' with the appropriate MemType. Avoid declarations of the following type: ''%%%%'' MyRoutine () { CCB myCel; . . . } Instead, follow this example: ''%%%%'' MyRoutine () { CCB *myCel; myCel = AllocMem (sizeof (CCB), MEMTYPE_CEL); . . . if (myCel) FreeMem (myCel, sizeof (CCB)); } It is especially important that you modify your code to anticipate this. The penalty for trying to DMA from non-DMA memory is having your task terminated.