/* test-erase.c */ /* avr.flash - AVR Trace. {{{ * * Copyright (C) 2008 NĂ©lio Laranjeiro * * APBTeam: * Web: http://apbteam.org/ * Email: team AT apbteam DOT org * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * }}} */ #include "common.h" #include "../../trace.h" #include "modules/flash/flash.h" #include #include #include "events.h" void flood (void) { uint8_t cmd; uint32_t count; uint32_t speed; uint32_t position; uint16_t acc; uint16_t arg1; uint8_t arg2; uint32_t arg3; trace_init (); flash_erase (FLASH_ERASE_FULL, 0); /* Flood the flash memory with traces. */ for (count = 0; count < 2000; count ++) { /* Right motor. */ speed = 10; position = 11; acc = 12; arg1 = 10; arg2 = 11; arg3 = 12; cmd = TRACE_ASSERV__RIGHT_MOTOR; TRACE (cmd, speed, position, acc); cmd = TRACE_ASSERV__LEFT_MOTOR; TRACE (cmd, speed, position, acc); cmd = TRACE_IA__IA_CMD; TRACE (cmd, arg1, arg2, arg3); if (trace_status () == TRACE_STATUS_OFF) return; } } uint8_t flood_overflow (void) { uint8_t cmd; uint32_t count; uint32_t i; uint32_t speed; uint32_t position; uint16_t acc; uint16_t arg1; uint8_t arg2; uint32_t arg3; uint32_t addr; if (trace_init () == TRACE_STATUS_OFF) return TRACE_STATUS_OFF; addr = trace_addr_current (); printf ("Addr begin : %x\n", addr); for (i = 0; i < FLASH_ADDRESS_HIGH; i++) { /* Flood the flash memory with traces. */ for (count = 0; count < 2000; count ++) { /* Right motor. */ speed = 10; position = 11; acc = 12; arg1 = 10; arg2 = 11; arg3 = 12; cmd = TRACE_ASSERV__RIGHT_MOTOR; TRACE (cmd, speed, position, acc); cmd = TRACE_ASSERV__LEFT_MOTOR; TRACE (cmd, speed, position, acc); cmd = TRACE_IA__IA_CMD; TRACE (cmd, arg1, arg2, arg3); } if (trace_status () == TRACE_STATUS_OFF) { addr = trace_addr_current (); printf ("End address : %x\n", addr); return TRACE_STATUS_OFF; } } addr = trace_addr_current (); printf ("End address : %x\n", addr); return TRACE_STATUS_ON; } void dump (void) { uint8_t status; uint32_t addr; status = flash_init (); if (status == TRACE_STATUS_OFF) return; for (addr = 0; addr < FLASH_ADDRESS_HIGH; addr ++) { printf ("%02x", flash_read (addr)); } } int main (int argc, char **argv) { uint8_t i; if (strcmp (argv[1], "trace") == 0) { for (i = 0; i < 30; i++) flood (); } else if (strcmp (argv[1], "overflow") == 0) { return flood_overflow (); } else if (strcmp (argv[1], "dump") == 0) dump(); return 0; }