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

 
 
> Lpc2000+RTOS+sprintf (Не работает sprintf), Как может операционка повлиять на sprintf ?
mihask
сообщение Feb 6 2007, 10:12
Сообщение #1


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Уважаемые сограждане подскажите пожалуйста, если кто знает smile.gif,
почему после выхода из sprintf программа переходит на вектор сбоя данных DAbt_Handler.
Так происходит только если я пытаюсь вывести в строку переменную float, если int то все нормально.
Почему такое может быть?

Процессор -LPC2103
Операционка - RTL- Keil
Компилятор-RealView

Структура программы следующая:
Есть три задачи каждая из которых активизируется периодически
при помощи конструкции:
Код
    os_itv_set (5);
        for(;;)
           {
             os_itv_wait ();
               }

это значит что каждая задача запускается каждые 50 млс (время для каждой задачи разное).
sprintf выполняется только в одной из задач.

Сообщение отредактировал mihask - Feb 6 2007, 10:15
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение Feb 6 2007, 13:23
Сообщение #2


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Хе..Хе, это грабли библиотеки RealView.
Помогает только опция: --min_array_alignment=8
Иначе в библиотеки работы с float происходит непредусмотренное смещение стека, но не всегда, а только при определенном расположении стека.
Поэтому легкая перекомпоновка кода может приводить к разному поведению sprintf.
А операционка влияет на это тем образом, что стеки задач и соответственно переменные в них распологаются юзером не так как это сделал бы компилер знай он, что там будет распологаться float.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Feb 6 2007, 13:32
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Т.е. еще уточнение. Сказанное относится к случаю если стеки задач определены статически как массивы.
Но если использовать для стеков динамическое выделение памяти, то нужно внимательно изучить менеджер динамической памяти.
Помочь может, например, менеджер блоков памяти фиксированной длины, который идет c uCOS.

Цитата(AlexandrY @ Feb 6 2007, 14:53) *
Хе..Хе, это грабли библиотеки RealView.
Помогает только опция: --min_array_alignment=8
Иначе в библиотеки работы с float происходит непредусмотренное смещение стека, но не всегда, а только при определенном расположении стека.
Поэтому легкая перекомпоновка кода может приводить к разному поведению sprintf.
А операционка влияет на это тем образом, что стеки задач и соответственно переменные в них распологаются юзером не так как это сделал бы компилер знай он, что там будет распологаться float.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mihask   Lpc2000+RTOS+sprintf (Не работает sprintf)   Feb 6 2007, 10:12
- - Alex B._   а стек задачи не переполняется случайно?   Feb 6 2007, 10:15
|- - mihask   Цитата(Alex B._ @ Feb 6 2007, 13:15) а ст...   Feb 6 2007, 10:19
|- - mihask   Добавлю еще, что если я отключаю одну из задач (пр...   Feb 6 2007, 11:30
|- - zltigo   Цитата(mihask @ Feb 6 2007, 09:19) Стек з...   Feb 6 2007, 12:07
|- - mihask   Цитата(zltigo @ Feb 6 2007, 15:07) Цитата...   Feb 6 2007, 12:25
|- - zltigo   Цитата(mihask @ Feb 6 2007, 11:25) А вы и...   Feb 6 2007, 12:33
- - Alex03   Цитата(mihask @ Feb 6 2007, 12:12) ...поч...   Feb 6 2007, 12:41
|- - zltigo   Цитата(Alex03 @ Feb 6 2007, 11:41) А Вы у...   Feb 6 2007, 13:01
|- - mihask   Цитата(Alex03 @ Feb 6 2007, 15:41) Цитата...   Feb 6 2007, 13:11
|- - zltigo   Цитата(AlexandrY @ Feb 6 2007, 12:23) Хе....   Feb 6 2007, 13:40
||- - AlexandrY   Компилер с самого начала придерживается выравниван...   Feb 6 2007, 15:29
||- - zltigo   Цитата(AlexandrY @ Feb 6 2007, 14:29) Ясн...   Feb 6 2007, 15:48
|- - mihask   Цитата(AlexandrY @ Feb 6 2007, 16:23) Хе....   Feb 6 2007, 13:50
- - Alex03   Цитата(zltigo @ Feb 6 2007, 15:01) Тем не...   Feb 6 2007, 13:23


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 10:03
Рейтинг@Mail.ru


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