+++ /dev/null
-# Sample Linker Command File for CodeWarrior for ColdFire\r
-\r
-KEEP_SECTION {.vectortable}\r
-\r
-# Memory ranges \r
-\r
-MEMORY {\r
- vectorram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000500\r
- code (RX) : ORIGIN = 0x20000500, LENGTH = 0x00002B00\r
- userram (RWX) : ORIGIN = 0x20003000, LENGTH = 0x00001000\r
-}\r
-\r
-SECTIONS {\r
- \r
-# Heap and Stack sizes definition\r
- ___heap_size = 0x400;\r
- ___stack_size = 0x400;\r
-\r
-\r
-\r
-# MCF52221 Derivative Memory map definitions from linker command files:\r
-# __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker\r
-# symbols must be defined in the linker command file.\r
-\r
-# Memory Mapped Registers (IPSBAR= 0x40000000)\r
- ___IPSBAR = 0x40000000;\r
-\r
-# 16 Kbytes Internal SRAM\r
- ___RAMBAR = 0x20000000;\r
- ___RAMBAR_SIZE = 0x00004000;\r
-\r
-# 128 KByte Internal Flash Memory\r
- ___FLASHBAR = 0x00000000;\r
- ___FLASHBAR_SIZE = 0x00020000;\r
-\r
- ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4;\r
- \r
- .userram : {} > userram \r
- .code : {} > code \r
- .vectorram : {} > vectorram \r
- \r
- .vectors :\r
- {\r
- exceptions.c(.vectortable)\r
- . = ALIGN (0x4); \r
- } >> code\r
-\r
-\r
- .text :\r
- {\r
- *(.text)\r
- . = ALIGN (0x4);\r
- *(.rodata)\r
- . = ALIGN (0x4); \r
- ___ROM_AT = .;\r
- ___DATA_ROM = .;\r
- } >> code\r
-\r
- .data : AT(___ROM_AT) \r
- { \r
- ___DATA_RAM = .;\r
- . = ALIGN(0x4);\r
- *(.exception) \r
- . = ALIGN(0x4); \r
- __exception_table_start__ = .;\r
- EXCEPTION\r
- __exception_table_end__ = .;\r
- \r
- ___sinit__ = .;\r
- STATICINIT\r
- __START_DATA = .;\r
-\r
- *(.data)\r
- . = ALIGN (0x4);\r
- __END_DATA = .;\r
-\r
- __START_SDATA = .;\r
- *(.sdata)\r
- . = ALIGN (0x4);\r
- __END_SDATA = .;\r
-\r
- ___DATA_END = .;\r
- __SDA_BASE = .;\r
- . = ALIGN (0x4);\r
- } >> userram\r
-\r
- .bss :\r
- {\r
- ___BSS_START = .;\r
- __START_SBSS = .;\r
- *(.sbss)\r
- . = ALIGN (0x4);\r
- *(SCOMMON)\r
- __END_SBSS = .;\r
-\r
- __START_BSS = .;\r
- *(.bss)\r
- . = ALIGN (0x4);\r
- *(COMMON)\r
- __END_BSS = .;\r
- ___BSS_END = .;\r
-\r
- . = ALIGN(0x4);\r
- } >> userram\r
-\r
- .custom :\r
- {\r
- ___HEAP_START = .;\r
- ___heap_addr = ___HEAP_START;\r
- ___HEAP_END = ___HEAP_START + ___heap_size;\r
- ___SP_END = ___HEAP_END;\r
- ___SP_INIT = ___SP_END + ___stack_size;\r
-\r
- . = ALIGN (0x4);\r
- } >> userram\r
- \r
- ___VECTOR_RAM = ADDR(.vectorram);\r
- \r
- __SP_INIT = ___SP_INIT;\r
-\r
- _romp_at = ___ROM_AT + SIZEOF(.data);\r
- .romp : AT(_romp_at)\r
- {\r
- __S_romp = _romp_at;\r
- WRITEW(___ROM_AT);\r
- WRITEW(ADDR(.data));\r
- WRITEW(SIZEOF(.data));\r
- WRITEW(0);\r
- WRITEW(0);\r
- WRITEW(0);\r
- }\r
-\r
-}
\ No newline at end of file
+++ /dev/null
-# Sample Linker Command File for CodeWarrior for ColdFire\r
-\r
-KEEP_SECTION {.vectortable}\r
-\r
-# Memory ranges \r
-\r
-MEMORY {\r
- vectorram (RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000500\r
- code (RX) : ORIGIN = 0x20000500, LENGTH = 0x00002B00\r
- userram (RWX) : ORIGIN = 0x20003000, LENGTH = 0x00001000\r
-}\r
-\r
-SECTIONS {\r
- \r
-# Heap and Stack sizes definition\r
- ___heap_size = 0x400;\r
- ___stack_size = 0x400;\r
-\r
-\r
-\r
-# MCF52221 Derivative Memory map definitions from linker command files:\r
-# __IPSBAR, __RAMBAR, __RAMBAR_SIZE, __FLASHBAR, __FLASHBAR_SIZE linker\r
-# symbols must be defined in the linker command file.\r
-\r
-# Memory Mapped Registers (IPSBAR= 0x40000000)\r
- ___IPSBAR = 0x40000000;\r
-\r
-# 16 Kbytes Internal SRAM\r
- ___RAMBAR = 0x20000000;\r
- ___RAMBAR_SIZE = 0x00004000;\r
-\r
-# 128 KByte Internal Flash Memory\r
- ___FLASHBAR = 0x00000000;\r
- ___FLASHBAR_SIZE = 0x00020000;\r
-\r
- ___SP_AFTER_RESET = ___RAMBAR + ___RAMBAR_SIZE - 4;\r
- \r
- .userram : {} > userram \r
- .code : {} > code \r
- .vectorram : {} > vectorram \r
- \r
- .vectors :\r
- {\r
- exceptions.c(.vectortable)\r
- . = ALIGN (0x4); \r
- } >> code\r
-\r
-\r
- .text :\r
- {\r
- *(.text)\r
- . = ALIGN (0x4);\r
- *(.rodata)\r
- . = ALIGN (0x4); \r
- ___ROM_AT = .;\r
- ___DATA_ROM = .;\r
- } >> code\r
-\r
- .data : AT(___ROM_AT) \r
- { \r
- ___DATA_RAM = .;\r
- . = ALIGN(0x4);\r
- *(.exception) \r
- . = ALIGN(0x4); \r
- __exception_table_start__ = .;\r
- EXCEPTION\r
- __exception_table_end__ = .;\r
- \r
- ___sinit__ = .;\r
- STATICINIT\r
- __START_DATA = .;\r
-\r
- *(.data)\r
- . = ALIGN (0x4);\r
- __END_DATA = .;\r
-\r
- __START_SDATA = .;\r
- *(.sdata)\r
- . = ALIGN (0x4);\r
- __END_SDATA = .;\r
-\r
- ___DATA_END = .;\r
- __SDA_BASE = .;\r
- . = ALIGN (0x4);\r
- } >> userram\r
-\r
- .bss :\r
- {\r
- ___BSS_START = .;\r
- __START_SBSS = .;\r
- *(.sbss)\r
- . = ALIGN (0x4);\r
- *(SCOMMON)\r
- __END_SBSS = .;\r
-\r
- __START_BSS = .;\r
- *(.bss)\r
- . = ALIGN (0x4);\r
- *(COMMON)\r
- __END_BSS = .;\r
- ___BSS_END = .;\r
-\r
- . = ALIGN(0x4);\r
- } >> userram\r
-\r
- .custom :\r
- {\r
- ___HEAP_START = .;\r
- ___heap_addr = ___HEAP_START;\r
- ___HEAP_END = ___HEAP_START + ___heap_size;\r
- ___SP_END = ___HEAP_END;\r
- ___SP_INIT = ___SP_END + ___stack_size;\r
-\r
- . = ALIGN (0x4);\r
- } >> userram\r
- \r
- ___VECTOR_RAM = ADDR(.vectorram);\r
- \r
- __SP_INIT = ___SP_INIT;\r
-\r
- _romp_at = ___ROM_AT + SIZEOF(.data);\r
- .romp : AT(_romp_at)\r
- {\r
- __S_romp = _romp_at;\r
- WRITEW(___ROM_AT);\r
- WRITEW(ADDR(.data));\r
- WRITEW(SIZEOF(.data));\r
- WRITEW(0);\r
- WRITEW(0);\r
- WRITEW(0);\r
- }\r
-\r
-}
\ No newline at end of file
/* Demo app includes. */\r
#include "BlockQ.h"\r
#include "death.h"\r
-#include "flash.h"\r
+#include "crflash.h"\r
#include "partest.h"\r
#include "semtest.h"\r
#include "PollQ.h"\r
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )\r
#define mainWEB_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
\r
+/* Co-routines are used to flash the LEDs. */\r
+#define mainNUM_FLASH_CO_ROUTINES ( 3 )\r
+\r
/*\r
* Configure the hardware for the demo.\r
*/\r
*/\r
static void prvCheckTask( void *pvParameters );\r
\r
-/*\r
- * Implement the 'Reg test' functionality as described at the top of this file.\r
- */\r
-static void vRegTest1Task( void *pvParameters );\r
-static void vRegTest2Task( void *pvParameters );\r
-\r
/*-----------------------------------------------------------*/\r
\r
/* Counters used to detect errors within the reg test tasks. */\r
prvSetupHardware();\r
\r
/* Start the standard demo tasks. */\r
- vStartLEDFlashTasks( tskIDLE_PRIORITY );\r
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
- vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );\r
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );\r
vStartQueuePeekTasks();\r
- vStartRecursiveMutexTasks();\r
vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );\r
\r
- /* Start the reg test tasks - defined in this file. */\r
- xTaskCreate( vRegTest1Task, ( signed portCHAR * ) "Reg1", configMINIMAL_STACK_SIZE, ( void * ) &ulRegTest1Counter, tskIDLE_PRIORITY, NULL );\r
- xTaskCreate( vRegTest2Task, ( signed portCHAR * ) "Reg2", configMINIMAL_STACK_SIZE, ( void * ) &ulRegTest2Counter, tskIDLE_PRIORITY, NULL );\r
+ /* For demo purposes use some co-routines to flash the LEDs. */\r
+ vStartFlashCoRoutines( mainNUM_FLASH_CO_ROUTINES );\r
\r
/* Create the check task. */\r
xTaskCreate( prvCheckTask, ( signed portCHAR * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
\r
- /* The suicide tasks must be created last as they need to know how many\r
- tasks were running prior to their creation in order to ascertain whether\r
- or not the correct/expected number of tasks are running at any given time. */\r
- vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );\r
-\r
/* Start the scheduler. */\r
vTaskStartScheduler();\r
\r
ulError |= 0x20UL;\r
}\r
\r
- if( xArePollingQueuesStillRunning() != pdTRUE )\r
- {\r
- ulError |= 0x40UL;\r
- }\r
-\r
- if( xIsCreateTaskStillRunning() != pdTRUE )\r
- {\r
- ulError |= 0x80UL;\r
- }\r
-\r
- if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
- {\r
- ulError |= 0x200UL;\r
- }\r
-\r
- if( ulLastRegTest1Count == ulRegTest1Counter )\r
- {\r
- ulError |= 0x1000UL;\r
- }\r
-\r
- if( ulLastRegTest2Count == ulRegTest2Counter )\r
- {\r
- ulError |= 0x1000UL;\r
- }\r
-\r
- ulLastRegTest1Count = ulRegTest1Counter;\r
- ulLastRegTest2Count = ulRegTest2Counter;\r
-\r
/* If an error has been found then increase our cycle rate, and in so\r
- going increase the rate at which the check task LED toggles. */\r
+ doing increase the rate at which the check task LED toggles. */\r
if( ulError != 0 )\r
{\r
ulTicksToWait = mainERROR_PERIOD;\r
}\r
/*-----------------------------------------------------------*/\r
\r
-static void vRegTest1Task( void *pvParameters )\r
-{\r
- /* Sanity check - did we receive the parameter expected? */\r
- if( pvParameters != &ulRegTest1Counter )\r
- {\r
- /* Change here so the check task can detect that an error occurred. */\r
- for( ;; )\r
- {\r
- }\r
- }\r
-\r
- /* Set all the registers to known values, then check that each retains its\r
- expected value - as described at the top of this file. If an error is\r
- found then the loop counter will no longer be incremented allowing the check\r
- task to recognise the error. */\r
- asm volatile ( "reg_test_1_start: \n\t"\r
- " moveq #1, d0 \n\t"\r
- " moveq #2, d1 \n\t"\r
- " moveq #3, d2 \n\t"\r
- " moveq #4, d3 \n\t"\r
- " moveq #5, d4 \n\t"\r
- " moveq #6, d5 \n\t"\r
- " moveq #7, d6 \n\t"\r
- " moveq #8, d7 \n\t"\r
- " move #9, a0 \n\t"\r
- " move #10, a1 \n\t"\r
- " move #11, a2 \n\t"\r
- " move #12, a3 \n\t"\r
- " move #13, a4 \n\t"\r
- " move #14, a5 \n\t"\r
- " move #15, a6 \n\t"\r
- " \n\t"\r
- " cmpi.l #1, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #2, d1 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #3, d2 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #4, d3 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #5, d4 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #6, d5 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #7, d6 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " cmpi.l #8, d7 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a0, d0 \n\t"\r
- " cmpi.l #9, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a1, d0 \n\t"\r
- " cmpi.l #10, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a2, d0 \n\t"\r
- " cmpi.l #11, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a3, d0 \n\t"\r
- " cmpi.l #12, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a4, d0 \n\t"\r
- " cmpi.l #13, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a5, d0 \n\t"\r
- " cmpi.l #14, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move a6, d0 \n\t"\r
- " cmpi.l #15, d0 \n\t"\r
- " bne reg_test_1_error \n\t"\r
- " move ulRegTest1Counter, d0 \n\t"\r
- " addq #1, d0 \n\t"\r
- " move d0, ulRegTest1Counter \n\t"\r
- " bra reg_test_1_start \n\t"\r
- "reg_test_1_error: \n\t"\r
- " bra reg_test_1_error \n\t"\r
- );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
-static void vRegTest2Task( void *pvParameters )\r
+void vApplicationIdleHook( void );\r
+void vApplicationIdleHook( void )\r
{\r
- /* Sanity check - did we receive the parameter expected? */\r
- if( pvParameters != &ulRegTest2Counter )\r
- {\r
- /* Change here so the check task can detect that an error occurred. */\r
- for( ;; )\r
- {\r
- }\r
- }\r
-\r
- /* Set all the registers to known values, then check that each retains its\r
- expected value - as described at the top of this file. If an error is\r
- found then the loop counter will no longer be incremented allowing the check\r
- task to recognise the error. */\r
- asm volatile ( "reg_test_2_start: \n\t"\r
- " moveq #10, d0 \n\t"\r
- " moveq #20, d1 \n\t"\r
- " moveq #30, d2 \n\t"\r
- " moveq #40, d3 \n\t"\r
- " moveq #50, d4 \n\t"\r
- " moveq #60, d5 \n\t"\r
- " moveq #70, d6 \n\t"\r
- " moveq #80, d7 \n\t"\r
- " move #90, a0 \n\t"\r
- " move #100, a1 \n\t"\r
- " move #110, a2 \n\t"\r
- " move #120, a3 \n\t"\r
- " move #130, a4 \n\t"\r
- " move #140, a5 \n\t"\r
- " move #150, a6 \n\t"\r
- " \n\t"\r
- " cmpi.l #10, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #20, d1 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #30, d2 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #40, d3 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #50, d4 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #60, d5 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #70, d6 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " cmpi.l #80, d7 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a0, d0 \n\t"\r
- " cmpi.l #90, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a1, d0 \n\t"\r
- " cmpi.l #100, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a2, d0 \n\t"\r
- " cmpi.l #110, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a3, d0 \n\t"\r
- " cmpi.l #120, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a4, d0 \n\t"\r
- " cmpi.l #130, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a5, d0 \n\t"\r
- " cmpi.l #140, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move a6, d0 \n\t"\r
- " cmpi.l #150, d0 \n\t"\r
- " bne reg_test_2_error \n\t"\r
- " move ulRegTest1Counter, d0 \n\t"\r
- " addq #1, d0 \n\t"\r
- " move d0, ulRegTest2Counter \n\t"\r
- " bra reg_test_2_start \n\t"\r
- "reg_test_2_error: \n\t"\r
- " bra reg_test_2_error \n\t"\r
- );\r
+ /* The co-routines run in the idle task. */\r
+ vCoRoutineSchedule();\r
}\r
/*-----------------------------------------------------------*/\r
\r
-/* To keep the linker happy. */\r
void exit( int n )\r
{\r
+ /* To keep the linker happy only as the libraries have been removed from\r
+ the build. */\r
( void ) n;\r
for( ;; ) {}\r
}\r
\r
-\r