Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Доступ к элементам структуры -> HardFault_Handler
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Arischenko Ivan
Коллеги,
Дано: IAR for ARM, 6.30.1342

Есть структура :
typedef struct
{
uint16_t Zone;
uint16_t Block;
uint16_t Page;
} NAND_ADDRESS;

создаю элемент типа этой структуры :
NAND_ADDRESS WriteReadAddr;

При попытке прочитать элемент WriteReadAddr.Zone попадаю в HardFault.
Я сделал workaround, чтобы обойти эту проблему, поменял тип элементов структуры поменял тип uint16_t на uint32_t.
typedef struct
{
uint32_t Zone;
uint32_t Block;
uint32_t Page;
} NAND_ADDRESS;

Но это не решение, просто я закопал проблему глубже.

Помоги разобраться, в чем корень проблемы?
scifi
Уточняющие вопросы:
- какой процессор?
- "NAND_ADDRESS WriteReadAddr;" - это что? Локальная или глобальная переменная? Или вообще размещается во внешней памяти?
Arischenko Ivan
stm32f4xx, переменная во внутренней sram, глобальная.

Entry Address Size Type Object
WriteReadAddr 0x20000814 0xc Data Gb main.o [1]
scifi
Странно это. Ничто не предвещает Hard Fault. Будет интересно, если посмотрите, какая именно инструкция вызывает Hard Fault, и каковы значения регистров перед этим.
Cosmojam
Какой именно fault? Что в CFSR и HFSR ?
Сразу напрашивается не выравненный доступ. Попробуйте
Код
typedef union
{
   struct {
       uint16_t Zone;
       uint16_t Block;
       uint16_t Page;
} data;
  uint32_t dummy;
} NAND_ADDRESS;
Arischenko Ivan
CFSR = 0x00010000, UNDEFINSTR = 1

UNDEFINSTR: Undefined instruction Usage Fault:
0 = no undefined instruction
1 = the processor has attempted to execute an undefined instruction. When this bit is set, the PC value
stacked for the exception return points to the undefined instruction. An undefined instruction is an
instruction that the processor cannot decode. Potential reasons:
a) Use of instructions not supported in the Cortex-M device.
cool.gif Bad or corrupted memory contents.

HFSR =0x40000000, FORSED = 1

The HFSR has bit 30 set indicating that the Usage Fault
was escalated to a Hard Fault (displayed as the FORCED
bit). This is consistent with the debugger source window
that shows the PC at the Hard Fault handler address.

Нажмите для просмотра прикрепленного файла
scifi
Может быть, у вас не STM32F4xx, а STM32F2xx? Тогда UXTAH будет undefined instruction, если не ошибаюсь.

Update:
Чтобы установить, какой там процессор, можно проверить регистр CPUID.
Arischenko Ivan
Цитата(scifi @ Aug 11 2012, 22:45) *
Может быть, у вас не STM32F4xx, а STM32F2xx? Тогда UXTAH будет undefined instruction, если не ошибаюсь.


#$#$!! В точку!
scifi, Большое спасибо.

В общем дело в чем : на столе у меня лежат две одинаковые платы и я считал что работаю с 417 процессором. С одной работаю, на второй смотрю процессор, разводку, думаю. В общем оказалось что я работал действительно с 217, думая что работаю с 417, держа в руках вторую плату с 417!.
Ведь IAR мне в консоли честно писал Cortex M3;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.