Перейти к содержанию
    

RoboTok

Участник
  • Постов

    175
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о RoboTok

  • Звание
    Частый гость
    Частый гость
  • День рождения 19.02.1977

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Сброс LPC2142.

    Заработало, как добавил __disable_irq
  2. Сброс LPC2142.

    Задачи не клинит, а завтра попробую __disable_irq... Кстати, в симуляторе работает нормально. Только, если в МК зашить, то перегружается.
  3. Сброс LPC2142.

    Что то в Keil-е сообщает об ошибке, если писать __disable_interrupt() и __enable_interrupt(). Приоритет выставил 3, другие остальные задачи запускал под 1 и 2 приоритетами. Как я понял, что задача имеет более высокий приоритет. Чип работает на 60МГц и PCLK = 15МГц.
  4. Сброс LPC2142.

    Извиняюсь, что влезаю, но чтоб зря темы не плодить... Настроил сторожевую собаку вот так: //Watchdog WDTC = 15000000; WDMOD = 3; WDFEED = 0xAA; WDFEED = 0x55; А скидываю вот так: /*---------------------------------------------------------------------------- * Task 'watchdog': watchdog task *---------------------------------------------------------------------------*/ __task void watchdog_task( void ) { while( 1 ) { WDFEED = 0xAA; WDFEED = 0x55; os_dly_wait( 50 ); } } Стоит ОС RTX Kernel от Keil. Задачу создал так: t_watchdog = os_tsk_create( watchdog_task, 3 ); Проблема в том, что периодически скидывается МК LPC2134. Когда я отключил собаку, то МК перестал сбрасываться. Что бы это означало ?
  5. Возник вопрос по формуле T_average = T_average + (T_current - T_average) / 20.0. Если я правильно понял, то первое значение лучше сразу занести в переменную T_average. А если не записать, то показания будут нарастать в зависимости от кол-ва отсчётов ?
  6. Конечно гарантировать, что они всегда на 0-ле я не могу. Но в программе я нигде не обращаюсь к ним. Вообще, у меня пробегала мысль, что нужно сбросить бит, даже если они и так 0-вые. В отладчике, то и так работает, без записи 0-лей.
  7. Возможно сбрасывают биты в 0 ? Только, не задача, они и так на 0-ле...
  8. Господа, кто по поводу UART-а всё таки выскажет мысли ? И ещё тут вопрос назрел. Есть код настройки порта на работу по I2C. Я не могу понять зачем там строка 1 и 3 ? PINSEL0 &= ~(3 << 4); // setup I2C.0 SCL pin PINSEL0 |= 1 << 4; PINSEL0 &= ~(3 << 6); // setup I2C.0 SDA pin PINSEL0 |= 1 << 6;
  9. Настраивал по примеру из Keil-а UART и заметил, что скорость не совсем точная выходит! Например, 9560, хотя сам UART работает. Понятно, что надо ставить кварц хитрый, а у меня стоит 12МГц. Сейчас настраивал UART на скорость 19200 и добился скорости 19188 с помощью комбинаций делителей DLL и FDR. Можно ли настроить ещё точнее скорость ? Как повлияет не точная скорость на работу ?
  10. Есть таймер и что ? Не переключает же. как вы сказали сами... А по обсуждению в другой ветке, которую вы привели, как раз похоже на кооперацию. Посмотрел документацию на RTX Kernel и нашёл там настройки по режиму многозадачности. Можно настроить ОС в режиме кооператива или вытеснения!
  11. Как я понимаю, чтоб задача переключилась ей надо передать управление ОС, как это было в Windows95. И потом уже ОС передаст управление ещё кому либо. haker_fox Почитал вашу ссылку. Как раз Win95 не иначе. А чтоб ОС сама могла переключить задачу нужна поддержка на аппаратном уровне.
  12. haker_fox Если вы почитаете внимательно ветку эту, да и другие мои ветки на форуме, то убедитесь, что я сам с собой обсуждаю проблемы ;) Очень помогает, но иногда помогают и другие пользователи... Например с FIQ-ом я понял, что он не реализован в Keil увы...
  13. В примерах у Keil-а есть проект Measure на ОС RTX. Оттуда я вырезал эти функции. И мне хотелось узнать, не о прерываниях, а о том будут ли все задачи ожидать пока функция fputc передаст байт в UART или ОС будет переключатся между задачами ? П.С. Рисковать нет смысла, т.к. эти функции ждут ожидания флага готовности и записывают\читают в\из регистр(а) данные!
  14. Решил попробовать ОС которая идёт с Keil R T L K e r n e l. И есть вопрос. Вот код работы с UART: /*---------------------------------------------------------------------------- * sendchar: Write a character to Serial Port *---------------------------------------------------------------------------*/ int fputc (int ch, FILE *f) { if (ch == '\n') { while (!(U1LSR & 0x20)); U1THR = CR; /* output CR */ } while (!(U1LSR & 0x20)); return (U1THR = ch); } /*---------------------------------------------------------------------------- * getchar: Read a character from Serial Port *---------------------------------------------------------------------------*/ int fgetc (FILE *f) { while (!(U1LSR & 0x01)); return (U1RBR); } Если я правильно понял, то в функциях стоит цикл while с ожиданием пока будет принят или отправлен байт. Так вот, если я буду отправлять длинную строку в UART будут ли у меня остальные задачи выполнятся ?
  15. Сделал и внедрил в свой модуль управления двигателями менеджер задач. Выкладываю библиотеку и файл примера. task.rar primertask1.rar
×
×
  • Создать...