- switch (memory_id) {
- case PGM_MEM_ID:
- if (address >= PGM_MEM_SIZE) {
- printf("Address (%lu) is greater than PGM_MEM_SIZE\n",
- address);
- return;
- } else
- pgm_mem[address] = value;
- break;
- case INT_MEM_ID:
- if (address >= INT_MEM_SIZE) {
- printf("Address (%lu) is greater than INT_MEM_SIZE\n",
- address);
- return;
- } else
- int_mem[address] = value;
- break;
- case EXT_MEM_ID:
- if (address >= EXT_MEM_SIZE) {
- printf("Address (%lu) is greater than EXT_MEM_SIZE\n",
- address);
- return;
- } else
- ext_mem[address] = value;
- break;
- default:
- /* Error. */
- break;
+ int k;
+ struct mem_infos_t *m;
+
+ /* Set desired and maximum allowable sizes for each memory type. */
+ mem_infos[PGM_MEM_ID].size = options.pram_size;
+ mem_infos[PGM_MEM_ID].max_size = PGM_MEM_MAX_SIZE;
+
+ mem_infos[INT_MEM_ID].size = options.iram_size;
+ mem_infos[INT_MEM_ID].max_size = INT_MEM_MAX_SIZE;
+
+ mem_infos[EXT_MEM_ID].size = options.xram_size;
+ mem_infos[EXT_MEM_ID].max_size = EXT_MEM_MAX_SIZE;
+
+ /* Verify if desired sizes are valid, and if so allocate memory. */
+ for (k = 0; k < MEM_ID_COUNT; k++) {
+ m = &mem_infos[k];
+
+ if (m->size > m->max_size) {
+ log_err("Memory size invalid (max = %d)", m->max_size);
+ exit(1);
+ }
+
+ m->buf = malloc(m->size);
+ if (m->buf == NULL) {
+ log_err("%s", strerror(errno));
+ exit(1);
+ }