#include <stdio.h>
#include <string.h>
#include <unistd.h>
-#include <stdarg.h>
#include "sim_avr.h"
#include "sim_core.h"
#include "sim_time.h"
#define AVR_KIND_DECL
#include "sim_core_decl.h"
-void std_logger(avr_t* avr, const int level, const char * format, ... );
-logger_t global_logger = std_logger;
-
int avr_init(avr_t * avr)
{
avr->flash = malloc(avr->flashend + 1);
avr->trace_data = calloc(1, sizeof(struct avr_trace_data_t));
#endif
- AVR_LOG(avr, LOG_TRACE, "%s init\n", avr->mmcu);
+ printf("%s init\n", avr->mmcu);
// cpu is in limbo before init is finished.
avr->state = cpu_Limbo;
void avr_reset(avr_t * avr)
{
- AVR_LOG(avr, LOG_TRACE, "%s reset\n", avr->mmcu);
+ printf("%s reset\n", avr->mmcu);
memset(avr->data, 0x0, avr->ramend + 1);
_avr_sp_set(avr, avr->ramend);
void avr_sadly_crashed(avr_t *avr, uint8_t signal)
{
- AVR_LOG(avr, LOG_ERROR, "%s\n", __FUNCTION__);
+ printf("%s\n", __FUNCTION__);
avr->state = cpu_Stopped;
if (avr->gdb_port) {
// enable gdb server, and wait
static void _avr_io_command_write(struct avr_t * avr, avr_io_addr_t addr, uint8_t v, void * param)
{
- AVR_LOG(avr, LOG_TRACE, "%s %02x\n", __FUNCTION__, v);
+ printf("%s %02x\n", __FUNCTION__, v);
switch (v) {
case SIMAVR_CMD_VCD_START_TRACE:
if (avr->vcd)
avr_irq_t * src = avr_io_getirq(avr, AVR_IOCTL_UART_GETIRQ('0'), UART_IRQ_OUTPUT);
avr_irq_t * dst = avr_io_getirq(avr, AVR_IOCTL_UART_GETIRQ('0'), UART_IRQ_INPUT);
if (src && dst) {
- AVR_LOG(avr, LOG_TRACE, "%s activating uart local echo IRQ src %p dst %p\n", __FUNCTION__, src, dst);
+ printf("%s activating uart local echo IRQ src %p dst %p\n", __FUNCTION__, src, dst);
avr_connect_irq(src, dst);
}
} break;
if (v == '\r' && buf) {
buf[len] = 0;
- AVR_LOG(avr, LOG_TRACE, "O:" "%s" "" "\n", buf);
+ printf("O:" "%s" "" "\n", buf);
fflush(stdout);
len = 0;
return;
void avr_loadcode(avr_t * avr, uint8_t * code, uint32_t size, avr_flashaddr_t address)
{
if (size > avr->flashend+1) {
- AVR_LOG(avr, LOG_ERROR, "avr_loadcode(): Attempted to load code of size %d but flash size is only %d.\n",
+ fprintf(stderr, "avr_loadcode(): Attempted to load code of size %d but flash size is only %d.\n",
size, avr->flashend+1);
abort();
}
if (avr->state == cpu_Sleeping) {
if (!avr->sreg[S_I]) {
if (avr->log)
- AVR_LOG(avr, LOG_TRACE, "simavr: sleeping with interrupts off, quitting gracefully\n");
+ printf("simavr: sleeping with interrupts off, quitting gracefully\n");
avr->state = cpu_Done;
return;
}
if (avr->state == cpu_Sleeping) {
if (!avr->sreg[S_I]) {
if (avr->log)
- AVR_LOG(avr, LOG_TRACE, "simavr: sleeping with interrupts off, quitting gracefully\n");
+ printf("simavr: sleeping with interrupts off, quitting gracefully\n");
avr->state = cpu_Done;
return;
}
}
}
if (!maker) {
- AVR_LOG(((avr_t*)0), LOG_ERROR, "%s: AVR '%s' not known\n", __FUNCTION__, name);
+ fprintf(stderr, "%s: AVR '%s' not known\n", __FUNCTION__, name);
return NULL;
}
avr_t * avr = maker->make();
- AVR_LOG(avr, LOG_TRACE, "Starting %s - flashend %04x ramend %04x e2end %04x\n", avr->mmcu, avr->flashend, avr->ramend, avr->e2end);
+ printf("Starting %s - flashend %04x ramend %04x e2end %04x\n", avr->mmcu, avr->flashend, avr->ramend, avr->e2end);
return avr;
}
-void std_logger(avr_t* avr, const int level, const char * format, ... ) {
- if (!avr || avr->log >= level)
- {
- va_list args;
- va_start(args, format);
- vfprintf((level > LOG_ERROR) ? stdout : stderr , format, args);
- va_end(args);
- }
-}
-
-
#define AVR_DATA_TO_IO(v) ((v) - 32)
#define AVR_IO_TO_DATA(v) ((v) + 32)
+/**
+ * Logging macros and associated log levels.
+ * The current log level is kept in avr->log.
+ */
+enum {
+ LOG_ERROR = 1,
+ LOG_WARNING,
+ LOG_TRACE,
+};
+#define AVR_LOG(avr, level, ...) \
+ do { \
+ if (avr->log >= level) \
+ fprintf(stdout, __VA_ARGS__); \
+ } while(0)
/*
* Core states.
void avr_callback_sleep_raw(avr_t * avr, avr_cycle_count_t howLong);
void avr_callback_run_raw(avr_t * avr);
-/**
- * Logging macros and associated log levels.
- * The current log level is kept in avr->log.
- */
-enum {
- LOG_ERROR = 1,
- LOG_WARNING,
- LOG_TRACE,
-};
-typedef void (*logger_t)(avr_t* avr, const int level, const char * format, ... );
-extern logger_t global_logger;
-#ifndef AVR_LOG
-#define AVR_LOG(avr, level, ...) \
- do { \
- global_logger( avr, level, __VA_ARGS__); \
- } while(0)
-#endif
-
#ifdef __cplusplus
};
#endif
avr->vcd,
firmware->traceperiod >= 1000 ? firmware->traceperiod : 1000);
- AVR_LOG(avr, LOG_TRACE, "Creating VCD trace file '%s'\n", avr->vcd->filename);
+ printf("Creating VCD trace file '%s'\n", avr->vcd->filename);
for (int ti = 0; ti < firmware->tracecount; ti++) {
if (firmware->trace[ti].mask == 0xff || firmware->trace[ti].mask == 0) {
// easy one
uint8_t mask = src[0];
uint16_t addr = src[1] | (src[2] << 8);
char * name = (char*)src + 3;
- AVR_LOG(NULL, LOG_TRACE, "AVR_MMCU_TAG_VCD_TRACE %04x:%02x - %s\n", addr, mask, name);
+ printf("AVR_MMCU_TAG_VCD_TRACE %04x:%02x - %s\n", addr, mask, name);
firmware->trace[firmware->tracecount].mask = mask;
firmware->trace[firmware->tracecount].addr = addr;
strncpy(firmware->trace[firmware->tracecount].name, name,
if ((fd = open(file, O_RDONLY | O_BINARY)) == -1 ||
(read(fd, &elf_header, sizeof(elf_header))) < sizeof(elf_header)) {
- AVR_LOG(NULL, LOG_ERROR, "could not read %s\n", file);
+ printf("could not read %s\n", file);
perror(file);
close(fd);
return -1;
// hdump("code", data_text->d_buf, data_text->d_size);
memcpy(firmware->flash + offset, data_text->d_buf, data_text->d_size);
offset += data_text->d_size;
- AVR_LOG(NULL, LOG_TRACE, "Loaded %u .text\n", (unsigned int)data_text->d_size);
+ printf("Loaded %u .text\n", (unsigned int)data_text->d_size);
}
if (data_data) {
// hdump("data", data_data->d_buf, data_data->d_size);
memcpy(firmware->flash + offset, data_data->d_buf, data_data->d_size);
- AVR_LOG(NULL, LOG_TRACE, "Loaded %u .data\n", (unsigned int)data_data->d_size);
+ printf("Loaded %u .data\n", (unsigned int)data_data->d_size);
offset += data_data->d_size;
firmware->datasize = data_data->d_size;
}
// hdump("eeprom", data_ee->d_buf, data_ee->d_size);
firmware->eeprom = malloc(data_ee->d_size);
memcpy(firmware->eeprom, data_ee->d_buf, data_ee->d_size);
- AVR_LOG(NULL, LOG_TRACE, "Loaded %u .eeprom\n", (unsigned int)data_ee->d_size);
+ printf("Loaded %u .eeprom\n", (unsigned int)data_ee->d_size);
firmware->eesize = data_ee->d_size;
}
// hdump("flash", avr->flash, offset);