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

 
 
> 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
Ответов
Alex B._
сообщение Feb 6 2007, 10:15
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 943
Регистрация: 6-07-04
Из: Санкт-Петербург
Пользователь №: 274



а стек задачи не переполняется случайно?
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 6 2007, 10:19
Сообщение #3


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

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



Цитата(Alex B._ @ Feb 6 2007, 13:15) *
а стек задачи не переполняется случайно?


Стек задачи со sprintf я выделил отдeльно от остальных задач
Код
static U32 stk2[256];
- т.е. 1024 байта, выделял и 2K
Не помогает smile.gif

Сообщение отредактировал mihask - Feb 6 2007, 10:20
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 6 2007, 12:07
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(mihask @ Feb 6 2007, 09:19) *
Стек задачи со sprintf я выделил отдeльно от остальных задач

Что значит "отдельно"? Точнее как "не отдельно" (если вытесняющие задачи) можно.

Цитата
Код
static U32 stk2[256];
- т.е. 1024 байта, выделял и 2K
Не помогает smile.gif

Осталось убедиться, что размер памяти линкеру указан правильный ( 8K всего у 2103 ) соответствующий данному чипу, иначе "выделить" то можно. А при попытке воспользоваться sad.gif.....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
mihask
сообщение Feb 6 2007, 12:25
Сообщение #5


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

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



Цитата(zltigo @ Feb 6 2007, 15:07) *
Цитата(mihask @ Feb 6 2007, 09:19) *

Стек задачи со sprintf я выделил отдeльно от остальных задач

Что значит "отдельно"? Точнее как "не отдельно" (если вытесняющие задачи) можно.

Цитата
Код
static U32 stk2[256];
- т.е. 1024 байта, выделял и 2K
Не помогает smile.gif

Осталось убедиться, что размер памяти линкеру указан правильный ( 8K всего у 2103 ) соответствующий данному чипу, иначе "выделить" то можно. А при попытке воспользоваться sad.gif.....


В Кейловской операционке стандартным способом (через конфигуратор ОС) можно выделить
только одинаковый размер стека для каждой задачи. А через специальную функцию(при создании задачи) можно выделить стек другого размера для отдельной задачи.

Размер памяти линкеру выделен правильный, потому что, если превышаем размер стека (при его настройке), то после перелинковки он матерится что 8К превышено.

А вы использовали sprintf c float c какой нибудь осью ? Никаких там хитростей нет , кроме стека?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 6 2007, 12:33
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(mihask @ Feb 6 2007, 11:25) *
А вы использовали sprintf c float c какой нибудь осью ? Никаких там хитростей нет , кроме стека?

Естественно использовал. Да какие там хитрости sad.gif - не хитрее memcpy().
Цитата
В Кейловской операционке стандартным способом (через конфигуратор ОС) можно выделить

Я бы назвал способ через какой-либо "конфигуратор" извращенным, а не стандарнтым smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mihask   Lpc2000+RTOS+sprintf (Не работает sprintf)   Feb 6 2007, 10:12
|- - mihask   Добавлю еще, что если я отключаю одну из задач (пр...   Feb 6 2007, 11:30
- - 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
- - AlexandrY   Хе..Хе, это грабли библиотеки RealView. Помогает т...   Feb 6 2007, 13:23
|- - AlexandrY   Т.е. еще уточнение. Сказанное относится к случаю е...   Feb 6 2007, 13:32
|- - 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 Текстовая версия Сейчас: 30th July 2025 - 04:12
Рейтинг@Mail.ru


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