реклама на сайте
подробности

 
 
> HardFault на операциях с double
dimka76
сообщение Sep 16 2010, 10:25
Сообщение #1


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Компилятор Sourcery G++ Lite 2010q1-188.

Ядро Cortex-M3.

При попытке выполнить операции с данными типа double контроллер вылетает в HardFault Exaption. Таже сама программа скомпилированая IAR работает нормально.

Ключи компиляции
Код
CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -g $(OPTIMIZATION) $(INCLUDES)
LDFLAGS = -Wl,--gc-sections,-Map=$@.map,-cref,-u,Reset_Handler -T link.ld


Подскажите в чем может быть причина возникновения исключительной ситуации?


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Sep 20 2010, 16:20
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Дима, в пылу предположений забыл спросить, нет ли какой-то бяки, связанной с плавучим умножением на нуль?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Sep 21 2010, 07:00
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



QUOTE (_Pasha @ Sep 20 2010, 19:20) *
Дима, в пылу предположений забыл спросить, нет ли какой-то бяки, связанной с плавучим умножением на нуль?

Результатом должен быть нуль безо всякого исключения.
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 21 2010, 11:38
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



глубина стека потребная для вызова вашей функции - 20 байтов, прогнал на всех значениях для входного параметра, у меня все работает.

я уже думаю что у вас проблемы не с флотами а с иницализацией в crt коде
до кучи покажите ключи оптимизации, вдруг вы умудрились воткнуть ему аппраратную плавучку...
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 21 2010, 12:08
Сообщение #5


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(klen @ Sep 21 2010, 15:38) *
глубина стека потребная для вызова вашей функции - 20 байтов, прогнал на всех значениях для входного параметра, у меня все работает.

я уже думаю что у вас проблемы не с флотами а с иницализацией в crt коде
до кучи покажите ключи оптимизации, вдруг вы умудрились воткнуть ему аппраратную плавучку...



Код
OPTIMIZATION = -Os
CFLAGS = -mcpu=cortex-m3 -mthumb -Wall -g $(OPTIMIZATION) $(INCLUDES) -DSTM32F10X_MD
LDFLAGS = -Wl,--gc-sections,-Map=$@.map,-cref,-u,Reset_Handler -T STM32.ld

#-------------------------------------------------------------------------------
#        Rules
#-------------------------------------------------------------------------------

all: clean gccversion $(BIN) $(OBJ) flash

$(BIN) $(OBJ):
    mkdir $@

define RULES
C_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(C_OBJECTS))
ASM_OBJECTS_$(1) = $(addprefix $(OBJ)/$(1)_, $(ASM_OBJECTS))

$(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1))
    $(CC) $(LDFLAGS) -o $(OUTPUT).elf $$^
    $(OBJCOPY) -O binary $(OUTPUT).elf $(OUTPUT).bin
    $(OBJDUMP) -h -z -S $(OUTPUT).elf > $(OUTPUT).lss
    $(SIZE) $$^ $(OUTPUT).elf

$$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN)
    $(CC) $(CFLAGS) -D$(1) -c -o $$@ $$<

$$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN)
    $(CC) $(ASFLAGS) -D$(1) -c -o $$@ $$<


crt код это sturtup ?

Если да, то вот его фрагменты

Код
.............................
#define STACK_SIZE       0x00000100      /*!< Stack size (in Words)           */
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];

...............................

__attribute__ ((section(".isr_vector")))
void (* const g_pfnVectors[])(void) =
{
  /*----------Core Exceptions-------------------------------------------------*/
  (void *)&pulStack[STACK_SIZE-1],     /*!< The initial stack pointer         */
  Reset_Handler,                /*!< Reset Handler        

.................................................................

void Default_Reset_Handler(void)
{
  /* Initialize data and bss */
  unsigned long *pulSrc, *pulDest;

  /* Copy the data segment initializers from flash to SRAM */
  pulSrc = &_sidata;

  for(pulDest = &_sdata; pulDest < &_edata; )
  {
    *(pulDest++) = *(pulSrc++);
  }

  /* Zero fill the bss segment.  This is done with inline assembly since this
     will clear the value of pulDest if it is not kept in a register. */
  __asm("  ldr     r0, =_sbss\n"
        "  ldr     r1, =_ebss\n"
        "  mov     r2, #0\n"
        "  .thumb_func\n"
        "zero_loop:\n"
        "    cmp     r0, r1\n"
        "    it      lt\n"
        "    strlt   r2, [r0], #4\n"
        "    blt     zero_loop");

  /* Setup the microcontroller system. */
  SystemInit();  // Настройка PLL

  /* Call the application's entry point.*/
  main();
}


Вот как описана секция .co_stack

Код
/* stack section */
    .co_stack (NOLOAD):
    {
        . = ALIGN(8);
        *(.co_stack .co_stack.*)
    } > ram




--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 21 2010, 19:33
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



на первый взгляд нет косяков, ошибка видимо смешная и тривиальноая, поэтому хрег найдеш smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- dimka76   HardFault на операциях с double   Sep 16 2010, 10:25
- - klen   на вскидку приходит мысль только о том что линкер ...   Sep 16 2010, 16:18
|- - AHTOXA   У меня на прошлой сборке (arm-2009q1-161-arm-none-...   Sep 16 2010, 17:02
|- - dimka76   Цитата(klen @ Sep 16 2010, 20:18) на вски...   Sep 17 2010, 05:03
|- - klen   а со стеком все впорядке,? плавющая запятая реали...   Sep 18 2010, 14:45
|- - dimka76   Цитата(klen @ Sep 18 2010, 18:45) а со ст...   Sep 20 2010, 05:29
|- - klen   Цитата(dimka76 @ Sep 20 2010, 09:29) Я во...   Sep 20 2010, 09:33
|- - dimka76   Цитата(klen @ Sep 20 2010, 13:33) дайте и...   Sep 20 2010, 09:42
|- - dimka76   Цитата(_Pasha @ Sep 20 2010, 20:20) Дима,...   Sep 21 2010, 04:50
|- - dimka76   Цитата(klen @ Sep 21 2010, 15:38) глубина...   Sep 22 2010, 04:30
|- - klen   Цитата(dimka76 @ Sep 22 2010, 08:30) Вы н...   Sep 22 2010, 10:03
|- - dimka76   Цитата(klen @ Sep 22 2010, 14:03) проверя...   Sep 22 2010, 10:57
- - GetSmart   Разве под отладчиком нельзя найти место "свал...   Sep 22 2010, 04:28
- - dimka76   Удалось решить проблему. Собрал свой проектик в K...   Sep 24 2010, 09:56
|- - _Pasha   Цитата(dimka76 @ Sep 24 2010, 13:56) КодL...   Sep 24 2010, 11:39
|- - dimka76   Цитата(_Pasha @ Sep 24 2010, 15:39) 1.У В...   Sep 24 2010, 12:01
|- - klen   -mcpu=cortex-m3 -mthumb это никак не могло сыграт...   Sep 24 2010, 12:45
||- - dimka76   Цитата(klen @ Sep 24 2010, 16:45) а вот -...   Sep 24 2010, 12:52
|- - MrYuran   Цитата(dimka76 @ Sep 24 2010, 16:01) А пл...   Sep 24 2010, 13:41
- - dimka76   Поэкспериментировав с ключиками линкера выяснил, ч...   Sep 25 2010, 03:47
- - klen   Цитата(dimka76 @ Sep 25 2010, 07:47) Поэк...   Sep 25 2010, 06:39
- - dimka76   Цитата(klen @ Sep 25 2010, 10:39) бред ка...   Sep 25 2010, 06:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 19:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016