• log RepRap lpc FreeRTOS Полночи пытаюсь понять, почему где-то в 3% случаев вызова interrupt handler (от uart или gpio) я незамедлительно оказываюсь в хардфолт-хендлере. Если у кого-то есть идеи — буду рад выслушать. Таргет — LPC1114/302. Невообразимо отвратительные быдлокоды тут: git://l29ah.blasux.ru/reprapfw
    А станочек тем временем обзавёлся концевиком на одной из осей и научился находить там ноль. Пока не разберусь с вышеописанной проблемой, пилить фирмварь дальше особого смысла не имеет, так что переключусь пока на запиливание остальных концевиков и тыкание терморегулятора.

Replies (11)

  • @L29Ah, Он при вызове сам на текущий стек сохраняет немало регистров, может переполняется?
  • @paulfertser, Увеличил стек тасков до 128 слов — виснет энивей.
  • @L29Ah, А там ещё есть стек прерываний отдельный. Если твоё прерывание преемптится другим более приоритетным или даже просто само по себе много стека использует, то тоже могут быть проблемы.
  • @paulfertser, В конфиге крутилки не нашёл.
  • @L29Ah, Я думаю надо посмотреть на первое слово в isr_vector у stm32 он, например, в ST/STM32F10x/startup/startup_stm32f10x_cl.c
  • @paulfertser, ./linker/lpc1114_flash_crp.ld: _vStackTop = _vRamTop;
  • @paulfertser, Подвигал стек туда-сюда — ничего не изменилось.
  • @L29Ah, (gdb) info all-registers
    r0 0x0 0
    r1 0xa5a5a5a5 2779096485
    r2 0xa5a5a5a5 2779096485
    r3 0x1 1
    r4 0xa5a5a5a5 2779096485
    r5 0xfffffff9 4294967289
    r6 0x1a04 6660
    r7 0x2100000e 553648142
    r8 0xa5a5a5a5 2779096485
    r9 0xa5a5a5a5 2779096485
    r10 0x100006e8 268437224
    r11 0x1000002c 268435500
    r12 0xa5a5a5a5 2779096485
    sp 0x20ffffe8 0x20ffffe8
    lr 0xfffffff9 0xfffffff9
    pc 0xfffffffe 0xfffffffe
    xPSR 0x61000000 1627389952
    cycles 0x0 0


    ../freertos/src/tasks.c:#define tskSTACK_FILL_BYTE ( 0xa5 )

    Чото смешное произошло.
  • @L29Ah, Решил. Надо внимательнее читать даташит. По-дефолту все интеррапты включаются с наивысшим приоритетом, из-за чего мои юарты вговниваются в скедьюлер и всё пидорасят.
  • @L29Ah, ааа, на cortex-m3 же scheduler из systick работает, у него высокий приоритет, а на m0 его нет, значит у тебя просто таймер, логично...
  • @paulfertser, У меня тоже систик.