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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> scmRTOS + CortexM3 + printf, некорректная работа printf
AHTOXA
сообщение Jan 15 2013, 14:13
Сообщение #31


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(haker_fox @ Jan 15 2013, 20:03) *
Что-то не так... Сейчас снова одни нули вместо плавучки выводятся. Причем если вернуть определение стека так, как я первоначально сделал - то работает. Как Вы предложили - нет crying.gif

Очень странно. Вообще-то эти варианты эквивалентны.
Только что увидел, что не до конца исправил:
Исправьте в конце TBaseProcess::init_stack_frame():
Код
#if scmRTOS_DEBUG_ENABLE == 1
    for (stack_item_t* pDst = StackBegin; pDst < StackPointer; pDst++)
        *pDst = STACK_DEFAULT_PATTERN;
#endif // scmRTOS_DEBUG_ENABLE

Цитата(haker_fox @ Jan 15 2013, 20:03) *
AHTOXA, а почему не стоит делать правку в кернел.h?

Потому что kernel.h - один на все порты. Чтобы внести правку в него, нужно вносить изменения во все порты (какие-то макросы придумывать, дефайны, или что-то типа того). Ну и вообще, не дело решать проблемы одного порта правками в коде оси, если есть иное решение.
А если вы ведёте речь о локальной правке, у себя, то такую правку делать можноsm.gif (Только если вдруг, через полгода-год, давным-давно забыв об этой истории, обновите ось, и что-то перестанет работать, то не говорите, что я вас не предупреждалsm.gif )


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 15 2013, 14:26
Сообщение #32


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Дико прошу прощения! Ввел в заблуждение себя и посеял сомнение вокруг((( Глаз замылился, и при правке кода допустил пару ошибок. Чтобы никого не смущать, приведу полный вариант правки, который у меня работает...
CODE
void TBaseProcess::init_stack_frame( stack_item_t * Stack
                                   , void (*exec)()
                                #if scmRTOS_DEBUG_ENABLE == 1
                                   , stack_item_t * StackBegin
                                #endif
                                   )
{
    //---------------------------------------------------------------
    //
    //  Prepare Process Stack Frame
    //
    StackPointer = (stack_item_t*)((uintptr_t)Stack & 0xFFFFFFF8);
    *(--StackPointer) = (stack_item_t)exec;    // return from interrupt address

    StackPointer -= 14;                        // emulate "push R0-R12", "push LR"

    if((uintptr_t)exec & (1 << 0))      // if exec is THUMB-mode code
        *(--StackPointer) =   0x003F;          // SR value: system mode, FIQ & IRQ enabled, THUMB mode
    else
        *(--StackPointer) =   0x001F;          // SR value: system mode, FIQ & IRQ enabled, ARM mode

   // StackPointer = Stack;               // pointer to stored context

#if scmRTOS_DEBUG_ENABLE == 1
    for (stack_item_t* pDst = StackBegin; pDst < StackPointer; pDst++)
        *pDst = STACK_DEFAULT_PATTERN;
#endif // scmRTOS_DEBUG_ENABLE
}


Извините, дамы и господа! sm.gif Работа по ночам - это плохо()

QUOTE (AHTOXA @ Jan 15 2013, 23:13) *
(Только если вдруг, через полгода-год, давным-давно забыв об этой истории, обновите ось, и что-то перестанет работать, то не говорите, что я вас не предупреждалsm.gif )

Ага, до меня дошло sm.gif)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 09:10
Рейтинг@Mail.ru


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