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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Вопросы по LPC2134 о FIQ и выдачи в UART и зависон в I2C
aaarrr
сообщение Jan 18 2009, 16:37
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Папа Карло @ Jan 18 2009, 19:30) *
Где P1 - ссылка на переменную.

Может, указатель все таки?

Цитата(Папа Карло @ Jan 18 2009, 19:30) *
Подскажите - это компилятор такой или всё таки *P1++ не корректное выражение ?

Компилятор правильный и *P1++ корректное выражение. Если результат не соответствует вашим ожиданиям, почитайте букварь по "C".
Для модификации переменной следовало написать: (*P1)++
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 18 2009, 18:07
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Папа Карло @ Jan 18 2009, 21:30) *
Подскажите - это компилятор такой или всё таки *P1++ не корректное выражение ?
Читайте стандарт Си на предмет порядка разыменований. Сначала выполняется инкремент указателя и только затем выполняется извлечение значения переменной по получившемуся адресу.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 18 2009, 19:36
Сообщение #33


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Сделал и внедрил в свой модуль управления двигателями менеджер задач.
Выкладываю библиотеку и файл примера.
Прикрепленные файлы
Прикрепленный файл  task.rar ( 1.06 килобайт ) Кол-во скачиваний: 31
Прикрепленный файл  primertask1.rar ( 673 байт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 19 2009, 14:57
Сообщение #34


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Решил попробовать ОС которая идёт с 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 будут ли у меня остальные задачи выполнятся ?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 19 2009, 15:20
Сообщение #35


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Папа Карло @ Jan 19 2009, 22:57) *
Если я правильно понял, то в функциях стоит цикл while с ожиданием пока будет принят или отправлен байт.

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 19 2009, 15:33
Сообщение #36


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



В примерах у Keil-а есть проект Measure на ОС RTX.
Оттуда я вырезал эти функции.

И мне хотелось узнать, не о прерываниях, а о том будут ли все задачи ожидать пока функция fputc передаст байт в UART или ОС будет переключатся между задачами ?

П.С.
Рисковать нет смысла, т.к. эти функции ждут ожидания флага готовности и записывают\читают в\из регистр(а) данные!
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 20 2009, 09:40
Сообщение #37


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Папа Карло @ Jan 19 2009, 23:33) *
И мне хотелось узнать, не о прерываниях, а о том будут ли все задачи ожидать пока функция fputc передаст байт в UART или ОС будет переключатся между задачами ?

Отвечаю по аналогии с scmRTOS - не будет переключаться. Когда я делал "тупой" опрос ножки МК в цикле, система висла. Как мне потом объяснили, нужно дать возможность ОСи переключиться на другие задачи. Тогда я по пути с поллингом ноги делал Sleep(какое-то время). Вот в этом случае у меня все работало великолепно. Здесь такой финт не допустим (ИМХО), т.к. теряется скорость обмена через порт.
Цитата(Папа Карло @ Jan 19 2009, 23:33) *
П.С.
Рисковать нет смысла, т.к. эти функции ждут ожидания флага готовности и записывают\читают в\из регистр(а) данные!

Как быстро Вы нашли твердое убеждение вот на это сомнение:
Цитата(Папа Карло)
Если я правильно понял, то в функциях стоит цикл while с ожиданием пока будет принят или отправлен байт.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 20 2009, 10:16
Сообщение #38


Гуру
******

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



Цитата(haker_fox @ Jan 20 2009, 11:40) *
Отвечаю по аналогии с scmRTOS - не будет переключаться. Когда я делал "тупой" опрос ножки МК в цикле, система висла. Как мне потом объяснили, нужно дать возможность ОСи переключиться на другие задачи.

Не так банально. На задачи БОЛЕЕ ВЫСОКОГО приоритета система переключится и без желания низкоприоритетной задачи. Словосочетание вытесняющаяя многозадачность приходилось слышать? Так вот это оно. Да и для задач равного приоритета (нет в scmRTOS) будет производится переключение между ними.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 10:26
Сообщение #39


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



haker_fox
Если вы почитаете внимательно ветку эту, да и другие мои ветки на форуме, то убедитесь, что я сам с собой обсуждаю проблемы wink.gif
Очень помогает, но иногда помогают и другие пользователи...

Например с FIQ-ом я понял, что он не реализован в Keil увы...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 20 2009, 10:38
Сообщение #40


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(zltigo @ Jan 20 2009, 18:16) *
Словосочетание вытесняющаяя многозадачность приходилось слышать?

Гм... согласно этому посту и моим прочтениям мануала, scmRTOS - вытесняющая многозадачная ОС... Тем не менее, переключения не происходило (в моем случае).


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 10:48
Сообщение #41


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Как я понимаю, чтоб задача переключилась ей надо передать управление ОС, как это было в Windows95.
И потом уже ОС передаст управление ещё кому либо.

haker_fox
Почитал вашу ссылку.
Как раз Win95 не иначе.

А чтоб ОС сама могла переключить задачу нужна поддержка на аппаратном уровне.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 20 2009, 10:58
Сообщение #42


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Папа Карло @ Jan 20 2009, 18:48) *
Как я понимаю, чтоб задача переключилась ей надо передать управление ОС, как это было в Windows95.

Win95 кооперативная ОС. scmRTOS - вытесняющая.
Цитата(Папа Карло @ Jan 20 2009, 18:48) *
haker_fox
Почитал вашу ссылку.
Как раз Win95 не иначе.

Прошу прощения, причем здесть Win95???
Цитата(Папа Карло @ Jan 20 2009, 18:48) *
А чтоб ОС сама могла переключить задачу нужна поддержка на аппаратном уровне.

Таймер-то есть. О какой поддержке на аппаратном уровне идет речь? MMU? Ну так он то точно тут не нужен.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 11:30
Сообщение #43


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Есть таймер и что ?
Не переключает же. как вы сказали сами...

А по обсуждению в другой ветке, которую вы привели, как раз похоже на кооперацию.

Посмотрел документацию на RTX Kernel и нашёл там настройки по режиму многозадачности.
Можно настроить ОС в режиме кооператива или вытеснения!
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 17:02
Сообщение #44


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Настраивал по примеру из Keil-а UART и заметил, что скорость не совсем точная выходит!
Например, 9560, хотя сам UART работает.

Понятно, что надо ставить кварц хитрый, а у меня стоит 12МГц.

Сейчас настраивал UART на скорость 19200 и добился скорости 19188 с помощью комбинаций делителей DLL и FDR.

Можно ли настроить ещё точнее скорость ?
Как повлияет не точная скорость на работу ?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 18:49
Сообщение #45


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

Группа: Новичок
Сообщений: 176
Регистрация: 15-02-08
Из: Москва
Пользователь №: 35 074



Господа, кто по поводу 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;
Go to the top of the page
 
+Quote Post

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

 


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


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