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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> порт под ADuC702x?
Сергей Борщ
сообщение Sep 14 2010, 18:26
Сообщение #16


Гуру
******

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



Цитата(AHTOXA @ Sep 14 2010, 20:09) *
Почему в скрипте сделано так:
Потому что скрипт писался на заре освоения GCC. По образу и подобию скриптов WinAVR. Вопрос можно было бы переадресовать им. Я тоже сейчас пишу только строку KEEP(), а портами scmRTOS давно не занимался. Конечно надо найти время и внести в них некоторые улучшения, но пока негде это время найти.


--------------------
На любой вопрос даю любой ответ
"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 14 2010, 20:04
Сообщение #17


Местный
***

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



Делаю под себя шаблон. Возник вопрос.
Зачем нужен Таймер1 и почему TEST_TIMER_RATE=3500 Hz ? Как я понимаю это нужно только для примера( Timer_Ovf.SignalISR(); ) .

Сообщение отредактировал a9d - Sep 14 2010, 20:24
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 14 2010, 20:27
Сообщение #18


Гуру
******

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



Цитата(a9d @ Sep 14 2010, 23:04) *
Как я понимаю это нужно только для примера( Timer_Ovf.SignalISR(); ) .
Да.


--------------------
На любой вопрос даю любой ответ
"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
сообщение Mar 7 2011, 22:35
Сообщение #19


Местный
***

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



Заметил при использовании channel непонятный момент(в порте под AVR этого не наблюдаю).

У меня есть следующий код

Код
OS::channel<char,200> bufCam;

    template<>
    OS_PROCESS void TProc2::Exec()
    {
        while(1)
        {
            Sleep(100);  //Если слип убрать, то система вешается. Но у этого процесса приоритет ниже. Почему первый
                                                               процесс не может забрать управление??
        }
    }


    template<>
    OS_PROCESS void TProc1::Exec()
    {
        MyUart.setChanel(3);

        char buf;

        while(1)
        {
            MyUart.sendByte(bufCam.get_count());

            Sleep(500);
        }

     }


extern "C" void IRQ_Switch()
{

    char b;

    dword irq = IRQSIG;
    irq &= IRQSTA;
    if(irq & RTOS_TIMER_BIT)
    {
        OS::SystemTimer_ISR();
    }
    else if (irq & UART_BIT)
    {
        b=COMRX;
        bufCam.push(b);
    }

}


Отсылаю разные по длине посылки. Размер их отображается верно.

Вопрос 1: Почему если из TProc2 убрать слип система зависает? У TProc1 приоритет выше и он должен забирать управление в любом случае. Ведь в процессе заглушка нет слипа и система работает.


Меняю код в TProc1

Код
    template<>
    OS_PROCESS void TProc1::Exec()
    {
        MyUart.setChanel(3);

        char buf;

        while(1)
        {
            bufCam.pop(buf);
            MyUart.sendByte(buf);
        }

     }


Если отправляю по одному байту, то отклика нет.
Если отправляю посылку, то возвращается только последний байт. Т.е. отправил "123" вернется "3".

Меня код снова

Код
    template<>
    OS_PROCESS void TProc1::Exec()
    {
        MyUart.setChanel(3);

        char buf;

        while(1)
        {
            bufCam.pop(buf,100);
            MyUart.sendByte(buf);
        }

     }


На выходе вижу равномерно идущие нули. Отправляю один байт, система подвисает и дальше снова начинают идти нули.

Иду дальше

Код
    template<>
    OS_PROCESS void TProc1::Exec()
    {
        MyUart.setChanel(3);

        char buf;

        while(1)
        {
            bufCam.pop(buf,100);
            MyUart.sendByte(bufCam.get_count());
        }

     }


Отправляю посылку. В теории я должен видеть число которое постоянно уменьшается на единицу. В реальности вижу только 0.


Пробовал сделать так

struct TData
{
char a;
};
OS::channel<TData,200> bufCam;

Результат такой же.


ЗЫ:

Так же нужно подредактировать файл pin_macros.h . В нем есть опечатка. Он выглядит так.
Код
#define PM_PINL(port,bit,dummy)     (!(GP##port##DAT & (1 << (bit))))
#define PM_PINH(port,bit,dummy)     (!PM_PINH(port,bit,dummy))


Но должно быть так?
Код
#define PM_PINL(port,bit,dummy)     (!(GP##port##DAT & (1 << (bit))))
#define PM_PINH(port,bit,dummy)     (!PM_PINL(port,bit,dummy))

Иначе не компилится.

Сообщение отредактировал a9d - Mar 7 2011, 22:53
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 8 2011, 09:38
Сообщение #20


Гуру
******

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



QUOTE (a9d @ Mar 8 2011, 00:35) *
У меня есть следующий код
Вы можете выложить сюда архив проекта, чтобы я погонял его под отладчиком?
QUOTE (a9d @ Mar 8 2011, 00:35) *
Так же нужно подредактировать файл pin_macros.h . В нем есть опечатка.
Спасибо. Там еще и в ADUC702x.h попутаны значения _FREE_RUNNING и _PERIODIC для таймеров. Не могу зафиксировать исправление в репозиторий - ствол залочен на время работы над версией 4.00


--------------------
На любой вопрос даю любой ответ
"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
сообщение Mar 8 2011, 11:47
Сообщение #21


Местный
***

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



Прикрепленный файл  robot_arm2.rar ( 305 килобайт ) Кол-во скачиваний: 102

Компилятор "Sourcery G++ Lite"

Емкость канала в 255 объектов актуальна на 8-ми битках. Но в армах этого маловато. У меня пакет полностью не помещается в канал.

Сообщение отредактировал a9d - Mar 8 2011, 11:50
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 8 2011, 14:08
Сообщение #22


Гуру
******

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



Не могу быстро найти свою отладочную платку с ADuC, но на первый взгляд вы забыли завести объект типа OS::TISRW в обработчике прерывания UART. И надо бы перед помещением в канал проверять - есть ли в канале место. Иначе при переполнении канала channel::push() будет пытаться выполнить перепланировку, что для прерывания не имеет смысла:
CODE
    else if (irq & UART_BIT)
    {
        OS::TISRW isrw;
        b=COMRX;
        if(bufCam.get_free_size())
            bufCam.push(b);
    }
Попробуйте, отпишитесь. Если не поможет - буду искать свою платку.


--------------------
На любой вопрос даю любой ответ
"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
сообщение Mar 8 2011, 14:20
Сообщение #23


Местный
***

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



Результат точно такой же. Проверку на переполнения я не делаю т.к. у меня ее произойти не может.
А если она и произойдет то это уже аварийная ситуация.

TChannel тоже не работает. Симптомы точно такие же.

Сообщение отредактировал a9d - Mar 8 2011, 15:58
Go to the top of the page
 
+Quote Post
a9d
сообщение Mar 8 2011, 17:21
Сообщение #24


Местный
***

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



Ура заработало))

Цитата
Спасибо. Там еще и в ADUC702x.h попутаны значения _FREE_RUNNING и _PERIODIC для таймеров. Не могу зафиксировать исправление в репозиторий - ствол залочен на время работы над версией 4.00


После этого все заработало.

ЗЫ: Та же процесс 1 стал забирать управление у процесса 2. Даже если во втором процессе нет слипа. Важный бит был.

ЗЗЫ:

Не сработало это
Код
    else if (irq & UART_BIT)
    {
        OS::TISRW isrw;
        b=COMRX;
        if(bufCam.get_free_size())
            bufCam.push(b);
    }


Нормальная настройка таймера сделала задержки такие как они и должны были быть. При проверке использовал старый хекс. Поэтому изменения сразу не заметил.

Сообщение отредактировал a9d - Mar 8 2011, 17:54
Go to the top of the page
 
+Quote Post

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

 


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


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