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

 
 
> scmRTOS + CortexM3 + printf, некорректная работа printf
shreck
сообщение Feb 7 2011, 06:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Столкнулся с такой проблемой.
Перестает работать printf (а также sprintf, vprintf и т.д.), если запущена ОСь. Проявляется это в том, что функция неправильно вынимает из стека, переданные ей параметры и, соответственно, неправильно их выводит.
Эффект наблюдается только на CortexM3 с компилятором IAR (конкретно 5.41.2). На ARM7, BlackFin, AVR, MSP430 - не наблюдается.
В чем может быть причина этого и как с это исправить?

Факты к размышлению.
1. У Cortexa есть два стека (в отличии от других упомянутых процев). Причем тот, который привычный CSTACK используется для прерываний. Для нужд приложения используется второй стек.
2. В связке CortexM3 + GCC printf сначала не работал, но после выравнивания стека задач TStackItem Stack[] на границу 8 байт, функция заработала. Выравнивание при использовании IAR не помогло.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Jan 11 2013, 13:27
Сообщение #2


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

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



Я имел в виду под ARM7TDMI... Принтф у меня не работала, пока я не закомментировал то, что было, и не добавил то, что ниже комментария... Версия 4.00
CODE
        class process : public TBaseProcess
        {
        public:
            INLINE_PROCESS_CTOR process();

            OS_PROCESS static void exec();
            
        #if scmRTOS_PROCESS_RESTART_ENABLE == 1
            INLINE void terminate();
        #endif
            

        private:
            //stack_item_t Stack[stack_size/sizeof(stack_item_t)];
            __attribute__ ((aligned (8))) stack_item_t Stack[stack_size/sizeof(stack_item_t)];


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jan 11 2013, 15:00
Сообщение #3


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

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



Цитата(haker_fox @ Jan 11 2013, 19:27) *
Я имел в виду под ARM7TDMI...

А тема про CortexM3 sm.gif
Тут такое дело. Дефайн не поможет в общем случае. Потому что выравнивать нужно не начальную вершину стека, а его вершину после сохранения начального контекста. У ARM7 и у Cortex-M3 контекст 16 слов, поэтому можно выравнивать и так и так. А вот с Cortex-M4F такой фокус уже не прокатит, там 17 слов. Поэтому выравнивать надо не централизованно, а в порте. Лучше - так, как я сделал в порте для Cortex-M4F.
Цитата(haker_fox @ Jan 11 2013, 19:27) *
Принтф у меня не работала, пока я не закомментировал то, что было, и не добавил то, что ниже комментария...

Не, так точно не надо. Надо как-то вот так (в OS_Target_cpp.cpp):
Код
void TBaseProcess::init_stack_frame( stack_item_t * Stack
                                   , void (*exec)()
                                #if scmRTOS_DEBUG_ENABLE == 1
                                   , stack_item_t * StackBegin
                                #endif
                                   )
{
    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

#if scmRTOS_DEBUG_ENABLE == 1
...

Попробуйте, и, если всё нормально, то я внесу правку в репозиторий.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- shreck   scmRTOS + CortexM3 + printf   Feb 7 2011, 06:28
- - AHTOXA   Цитата(shreck @ Feb 7 2011, 11:28) 2. В с...   Feb 7 2011, 07:34
|- - shreck   Цитата(AHTOXA @ Feb 7 2011, 14:34) Вот чт...   Feb 7 2011, 08:25
|- - AHTOXA   Цитата(shreck @ Feb 7 2011, 13:25) Вопрос...   Feb 7 2011, 09:05
||- - shreck   Цитата(AHTOXA @ Feb 7 2011, 16:05) А как ...   Feb 7 2011, 09:41
||- - AHTOXA   Цитата(shreck @ Feb 7 2011, 14:41) Код#pr...   Feb 7 2011, 10:51
||- - sonycman   Цитата(shreck @ Feb 7 2011, 13:46) Дело н...   Feb 7 2011, 14:55
||- - AHTOXA   Цитата(sonycman @ Feb 7 2011, 19:55) Как ...   Feb 7 2011, 15:38
||- - sonycman   Цитата(AHTOXA @ Feb 7 2011, 18:38) Возмож...   Feb 7 2011, 16:20
||- - AHTOXA   Цитата(sonycman @ Feb 7 2011, 21:20) Да, ...   Feb 7 2011, 16:47
||- - sonycman   Цитата(AHTOXA @ Feb 7 2011, 19:47) Как эт...   Feb 7 2011, 16:59
||- - AHTOXA   Цитата(sonycman @ Feb 7 2011, 21:59) Э, н...   Feb 7 2011, 17:11
||- - sonycman   Цитата(AHTOXA @ Feb 7 2011, 20:11) Точно?...   Feb 7 2011, 17:17
||- - AHTOXA   Да, плавучка. Я не помню, где я про это читал, пом...   Feb 7 2011, 17:28
||- - shreck   Цитата(sonycman @ Feb 8 2011, 00:17) Счит...   Feb 8 2011, 03:15
|- - sonycman   Цитата(shreck @ Feb 7 2011, 11:25) Да, пр...   Feb 7 2011, 09:34
|- - AHTOXA   Цитата(sonycman @ Feb 7 2011, 14:34) Ника...   Feb 7 2011, 09:40
|- - sonycman   Цитата(AHTOXA @ Feb 7 2011, 12:40) Там ка...   Feb 7 2011, 10:36
|- - shreck   Цитата(sonycman @ Feb 7 2011, 18:36) Ну, ...   Feb 7 2011, 10:46
- - VslavX   Я тоже наступил на эти шикарные грабли. Недавно...   Jan 30 2012, 00:01
- - cerebral   Принимаю эстафету в беге по граблям. Не могу найт...   Feb 21 2012, 06:53
|- - Сергей Борщ   QUOTE (cerebral @ Feb 21 2012, 08:53) В h...   Feb 21 2012, 07:00
|- - cerebral   Сергей, спасибо. Проблема действительно была заклю...   Feb 21 2012, 07:30
- - haker_fox   РРРР!) Прошу прощения за поднятие старой темы....   Jan 11 2013, 12:32
|- - AHTOXA   Цитата(haker_fox @ Jan 11 2013, 18:32) З....   Jan 11 2013, 13:18
|- - haker_fox   QUOTE (AHTOXA @ Jan 12 2013, 00:00) А тем...   Jan 11 2013, 15:29
|- - AHTOXA   Исправил в репозитории. Попутно вскрылся интересн...   Jan 11 2013, 16:54
|- - haker_fox   QUOTE (AHTOXA @ Jan 12 2013, 01:54) Испра...   Jan 15 2013, 14:10
|- - AHTOXA   Цитата(haker_fox @ Jan 15 2013, 20:03) Чт...   Jan 15 2013, 14:13
- - haker_fox   Дико прошу прощения! Ввел в заблуждение себя и...   Jan 15 2013, 14:26


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 13:48
Рейтинг@Mail.ru


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