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

 
 
> Инициализация статического экземпляра класса ARM7 lpc23xx, Валится в програмное прерывание
SmileGobo
сообщение May 12 2011, 13:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



Написал класс- абстракцию для UART
Код
class UART:public Peripheral{
    //byte buf[8];
    protected:
    enum {
        RBR=0,THR=0,DLL=0,DLM=1,IER=1,IIR=2,FCR=2,LCR=3,
        LSR=5,SCR=7,ACR=8,ICR=9,FDR=10,TER=12        
    };
    static UART DEV[UART_SIZE];

    public:
        //UART(UARTName name,UARTOption *Option = (UARTOption *)NULL);
        UART(UARTName name);
        ~UART();
        void Init(UARTOption* Option);
        uint GetState() const;
        uint GetIntStatus() const;
        void ClearInt();
        bool Read(byte* buf,const uint& size);
        bool Send(byte* buf,const uint& size);
        void ClearRxFIFO();
        void ClearTxFIFO();
        static UART* GetUART(uint num);
};


Инициализирую статическую переменную:

Код
UART UART::DEV[]={UART(UART_0),UART(UART_1),UART(UART_2),UART(UART_3)};


И в этом случае программа валится в програмное прерывание, я так понимаю до main() невозможно вызвать свой код? Или же можно как-то проинициализировать статический экземпляр класса???
Стандартные типы инициализируются на ура, а вот с объектами проблема.

среда KEIL uVision 4.10 гонял на симуляторе
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SmileGobo
сообщение May 13 2011, 08:58
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



2 Forger

Чтобы использовать отложенную инициализацию мне нужна динамическая память, а ее я бы не хотел использовать, так как не знаю сколько мне ее потребуется. Если вы мне подскажите методику как можно расчитывать heap при использовании задданого колличества классов и объектов.

Собственно про умные книжки по плюсам хотелось больше конкретики.

кроме шаблона синглотон, я тут пытаюсь реализовать шаблон реестра. Но опять для реализации этих шаблонов нужна динамическая память.
Поэтому пытаюсь все делать статически

Так же я не использую ОС вообще...


2 Сергей Борщ

А зачем не вобще нужен обработчик програмного прерывания?

А за пошаговую отладку по конструктору что-то не догадался, пойду прогоню

После перехода по адресу __main отладчик перестает выполнятся по шагам
Код
IMPORT  __main
LDR     R0, =__main
BX      R0


а по принудительной остановке висит тут:
Код
SWI_Handler     B       SWI_Handler

Что касается массива объектов, то он вполне себе проинициализирован, хотя до конструкторов дело не дошло.
Я в недоумении.

Сообщение отредактировал SmileGobo - May 13 2011, 08:59
Go to the top of the page
 
+Quote Post
Forger
сообщение May 13 2011, 20:08
Сообщение #3


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

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(SmileGobo @ May 13 2011, 12:58) *
Чтобы использовать отложенную инициализацию мне нужна динамическая память, а ее я бы не хотел использовать, так как не знаю сколько мне ее потребуется. Если вы мне подскажите методику как можно расчитывать heap при использовании задданого колличества классов и объектов.

А я вообще не использую динамическую память, и в настройках линкера указываю размер кучи ноль байт.
Даже считаю ее злом в таких встраиваемых решениях с фиксированных набором задач.
К тому же есть такое понятие в RTOS - pool, это что-то типа кучи блоков фиксированного размера. Посмотрите туда. Работает гораздо предсказуемее обычной кучи - в принципе нет фрагментации.

Я по-началу делал с помощью односвязного списка запуск потоков, которые были объявлены статически до запуска RTOS (щас делаю чуть по-другому). Короче, почитайте под двух- и односвязные списки.

p.s.
Тут как-то недавно я писал про что-то подобное. Может, поможет.




--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post



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

 


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


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