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

 
 
18 страниц V  « < 9 10 11 12 13 > »   
Reply to this topicStart new topic
> Начало работы with scmRTOS, Несколько вопросиков
a9d
сообщение Sep 13 2011, 09:44
Сообщение #151


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



А что понимается под конструкторами ? Функции вида:
Код
void Reset_Handler(void)
{
    __Init_Data();

    main();
}

Есть подобное. Но сильно отличается.

Да знак ! не заметил.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2011, 10:35
Сообщение #152


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

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



Цитата(a9d @ Sep 13 2011, 15:44) *
А что понимается под конструкторами ?

Конструкторы - это конструкторы. Функции инициализации объектов.
Короче, без их вызова работать не будет.
Вызываются как раз в __Init_Data():
Код
    /* Call constructors */
    unsigned long *ctors;
    for(ctors = &__ctors_start__; ctors < &__ctors_end__; )
        ((void(*)(void))(*ctors++))();

Цитата(a9d @ Sep 13 2011, 15:44) *
Есть подобное. Но сильно отличается.

biggrin.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2011, 10:38
Сообщение #153


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Такого нет. Но как я понимаю конструкторы нужны С++. Либы от стм все на си.

Определил виновника

Код
#pragma weak HardFault_Handler = Default_Handler1


Объявил обработчика
Код
OS_INTERRUPT void HardFault_Handler(void){
    for (;;);
}


И начал попадать в него. Теперь осталось определить что это и почему срабатывает.

Сообщение отредактировал a9d - Sep 13 2011, 11:10
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 13 2011, 12:03
Сообщение #154


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (a9d @ Sep 13 2011, 13:38) *
Но как я понимаю конструкторы нужны С++. Либы от стм все на си.
А ОС на плюсах. И пока не будут вызываться конструкторы - ОСь работать не будет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2011, 14:25
Сообщение #155


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Все нашел косяк. У вас STM32F10X_MD_VL.ld не правильный. Возможно и другие тоже.

Использовал конфиг от stm. Немного подправил и отладка заработала. ОС тоже работает. Но это покачто сделал на скорую руку.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2011, 14:47
Сообщение #156


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

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



Цитата(a9d @ Sep 13 2011, 20:25) *
Все нашел косяк. У вас STM32F10X_MD_VL.ld не правильный. Возможно и другие тоже.

А поконкретнее?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2011, 15:18
Сообщение #157


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Исходя из того какое прерывание вызывается можно понят, что косяк с выделением памяти под стек.
Это я нагуглил. На форумах пишут, что HardFault_Handler происходит при некорректном выделении памяти, обычно под стек или кучу.

Сравнил ваш и стм конфиг. Они отличаются строкой
Код
/* Entry Point */
ENTRY(Reset_Handler)


Добавил ее в ваш и все заработало.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2011, 16:12
Сообщение #158


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

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



Гм. Очень странно... Давайте уточним пару моментов.
1. Программа без этого работает, но при отладке виснет?
2. Какой у вас компилятор?
3. При чём здесь "косяк с выделением памяти под стек"? sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
a9d
сообщение Sep 13 2011, 16:16
Сообщение #159


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



1) Да, работает. Но при отладке улетает в прерывание. Если его не объявить, то вешается. Если объявить, то отладка работать будет но смотрится как-то не кошерно такой вариант.
2) Sourcery G++ Lite самый последний.
3) Это на этом форуме нагуглил.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 13 2011, 16:29
Сообщение #160


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

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



Раз программа работает, то дело естественно не в "косяке с выделением памяти". Думаю, что отладчик без этой строчки как-то не так понимает elf-файл, и загоняет процессор куда-то не туда.
Спасибо вам за найденный косяк. Надо будет исправить...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Chudik
сообщение Oct 3 2012, 05:43
Сообщение #161


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

Группа: Свой
Сообщений: 197
Регистрация: 31-03-06
Пользователь №: 15 676



Не знал куда запостить свой вопрос и запостил в соседнюю тему: http://electronix.ru/forum/index.php?showt...t&p=1098216
Буду очень благодарен, если кто ответит.
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 8 2012, 02:54
Сообщение #162


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Вопрос не совсем по теме.

Сейчас вожусь с портированием scmRTOS на CC2510 (ядро 8051). Кмпилятор IAR, используется программный стек. Я знаю адрес (0x11 0x10) где хранится указатель на шапку стека. Т.е. регистр SPX (хотя во время отладки он называется XSP). Этот адрес строго фиксированный ? Т.е. во всех версиях он одинаковый.

Как я понял адрес определяется R0..R7 * Колличество банков + V0..V7

В документации
Цитата
XSP
Description Holds the stack pointers to the xdata stack.
Segment memory type DATA
Memory placement 0–0x7F
Access type Read/write


Цитата
-Z(DATA)XSP=08-7F



Почему в порте для AVR размер для стеков typedef uint8_t stack_item_ ? Это каждый стек не может превышать 255 байт?

Сообщение отредактировал a9d - Nov 8 2012, 11:05
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 8 2012, 11:39
Сообщение #163


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



stak_item_t -- тип хранящихся в стеке даных (его гранулярность). А не размер.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение Nov 8 2012, 21:35
Сообщение #164


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Правильно я понимаю, что освоив данную ось, проблем с переходом от одного проца к другому нет вообще? Т.е. я не изучаю досконально работу процессора, а просто пишу код. Использую прерывания, работу с периферией и прочее, но описываю их правилами оси?
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 9 2012, 00:46
Сообщение #165


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Распетлял. Ох там все и закручено.

Код
#pragma segment="XSP"
    #define  ABS_WORD()  (*((__data volatile unsigned int*)(unsigned int)(__segment_begin("XSP"))))
    int s  = ABS_WORD();



Сообщение отредактировал a9d - Nov 9 2012, 03:07
Go to the top of the page
 
+Quote Post

18 страниц V  « < 9 10 11 12 13 > » 
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:56
Рейтинг@Mail.ru


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