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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Вопросы по LPC2134 о FIQ и выдачи в UART и зависон в I2C
Папа Карло
сообщение Jan 15 2009, 21:50
Сообщение #1


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

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



Всем привет.

Подскажите пожалуйста по прерываниям.

Чем отличается обычное прерывание от FIQ и как вызвать, например таймер 1, способом FIQ?

Ещё такой вопрос, есть у меня функция print_f( char * ), которая выводит в UART строку текста.
Но во время вывода длинной строки МК больше ничего не может делать, а только выводом занимается.
Если сделать кольцевой буфер, то при превышении размера буфера, всё равно нагрузит вывод в UART МК.

Как бы мне сделать, чтоб команда print_f работала как бы в фоновом режиме ?

Ещё вопрос по поводу выводы в I2C.
Например, я вывожу информацию в UART и даже если её не принимают на обратной стороне, буфер вывода освобождается.
Как бы мне сделать так, чтоб при передачи по I2C тоже не возникало переполнения буфера, если на другой стороне его не принимают?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 12:45
Сообщение #2


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

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



Что никто не использовал FIQ ?
Я в ДШ посмотрел и не могу понять, как настроить прерывание FIQ.

Было бы хорошо, чтоб кто нибудь кусок кода показал, как оно инициализируется!
Go to the top of the page
 
+Quote Post
dlman
сообщение Jan 16 2009, 12:58
Сообщение #3


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

Группа: Участник
Сообщений: 88
Регистрация: 28-05-06
Из: Москва
Пользователь №: 17 530



#define VIC_TIMER0 4 /* Timer 0 (Match 0-3 Capture 0-3) */

VICIntSelect |= (1 << VIC_TIMER0); /* Configure the timer interrupt as an FIQ source. */
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 13:15
Сообщение #4


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

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



ХМ, а как назначить этому прерыванию нужную функцию, если в VICVectAddr нельзя записать адрес её ?
Может надо что-то в Keil писать ?

И сколько можно назначить FIQ-ов ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 16 2009, 13:57
Сообщение #5


Гуру
******

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



Цитата(Папа Карло @ Jan 16 2009, 15:15) *
ХМ, а как назначить этому прерыванию нужную функцию, если в VICVectAddr нельзя записать адрес её ?
Может надо что-то в Keil писать ?
Ага. А дядюшка кейл телепатически передаст адрес функции процессору. FIQ на то и FIQ (быстрое), что предполагает один единственный обработчик. Переход на который и записан намертво по адресу вектора исключения. В этом обработчике вы обрабатываетет один единственный источник прерывания. Или можете вручную ветвиться по флагам VICFIQStatus, но тогда напрочь пропадает вся "быстрость" FIQ.

Цитата(Папа Карло @ Jan 16 2009, 15:15) *
И сколько можно назначить FIQ-ов ?
А почитать user manual?


--------------------
На любой вопрос даю любой ответ
"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
Папа Карло
сообщение Jan 16 2009, 14:05
Сообщение #6


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

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



Разобрался с FIQ.
Вместо __IRQ надо писать __FIQ.
Жаль конечно только 1 фик есть.

А как бы мне передать по UART длинный кусок данных, чтоб весь МК в ожидание не ставить ?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 17:25
Сообщение #7


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

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



Что то ошибки выдаёт Keil.

Написал так:

Код
void T1_Isr( void ) __fiq
{

}

void init(void)
{
VICIntSelect = 0x20;
VICIntEnable = 0x20;
}


Keil выкидывает кучу ошибок.
В чём может быть проблема?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 16 2009, 17:39
Сообщение #8


Гуру
******

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



Цитата(Сергей Борщ @ Jan 16 2009, 16:57) *
FIQ на то и FIQ (быстрое), что предполагает один единственный обработчик.

Дык, и IRQ тоже один одинешенек.
Цитата
Переход на который и записан намертво по адресу вектора исключения.

Как и у IRQ.
Цитата
В этом обработчике вы обрабатываетет один единственный источник прерывания.

Или нет
Цитата
Или можете вручную ветвиться по флагам VICFIQStatus, но тогда напрочь пропадает вся "быстрость" FIQ.

Отчего-же? Никто не способен отнять у FIQ собственный стек, собственные регистры чуть более быстую реакцию на прерывание и более высокий приоритет. А ветвиться при необходимости нужно, как и вслучае IRQ, по VICVectAddr вычитывая его одной командой из VIC.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 16 2009, 17:41
Сообщение #9


Гуру
******

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



Цитата(Папа Карло @ Jan 16 2009, 20:25) *
Keil выкидывает кучу ошибок.

Каких?

Цитата(Папа Карло @ Jan 16 2009, 20:25) *
В чём может быть проблема?

Например в том, что он не знает слово __fiq.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 18:04
Сообщение #10


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

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



Я сейчас посмотрел описание. которое шло с Keil, там тоже указано как я написал и в примерах.
Но у меня выкидывает сразу ошибок 20 в разных строках и первая ошибка:

drvmot1.c(70): error: #77-D: this declaration has no storage class or type specifier

Функцию прерывания определил так:
Код
__fiq void T1_Isr( void )
{
}


Если определить так:
Код
void T1_Isr( void ) __fiq
{
}


То выдаёт первую такую ошибку:

drvmot1.h(63): error: #130: expected a "{"
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 16 2009, 18:12
Сообщение #11


Гуру
******

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



__fiq было в CARM, у Вас, скорее всего, RVCT. Впрочем, в CARM оно преимуществ режима FIQ все равно не использовало, насколько я знаю.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 18:43
Сообщение #12


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

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



А не профи в этом деле и не знаю, что такое CARM и RVCT.

Может вы мне подскажете, как мне в Keil uVision3 V3.72 сделать этот "ФИК" ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 16 2009, 19:46
Сообщение #13


Гуру
******

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



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

Цитата(Папа Карло @ Jan 16 2009, 21:43) *
А не профи в этом деле и не знаю, что такое CARM и RVCT.

CARM и RVCT - компиляторы (бывший и нынешний) в составе Keil.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 16 2009, 19:50
Сообщение #14


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

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



Ну а что мне делать то ?
__fiq выдаёт ошибку, а если писать __irq, то непонятно как привязать адрес функции к вектору прерываний!

Кто то же делал этот fiq ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 16 2009, 20:05
Сообщение #15


Гуру
******

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



Цитата(Папа Карло @ Jan 16 2009, 22:50) *
__fiq выдаёт ошибку, а если писать __irq, то непонятно как привязать адрес функции к вектору прерываний!

Ни __irq ни __fiq ничего ни к чему не привязывают, они лишь указывают компилятору, что это процедура прерывания и ее надо снабдить соответствующими прологом и эпилогом.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 17 2009, 11:28
Сообщение #16


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

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



Всем привет.

Вот появилась у меня сделать свой простой менеджер задач для МК LPC2134.

Сейчас я таймером включаю светофор у задачи и в main скидываю светофор выполненной задачи.

Хочу сделать функции, чтоб можно было создать задачу, добавить её в список и чтобы она периодически вызывалась.

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

Прошу помочь идеями реализованными и советами.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 17 2009, 14:02
Сообщение #17


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

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



Цитата(Папа Карло @ Jan 17 2009, 19:28) *
Прошу помочь идеями реализованными и советами.

Прошу прощения, если я что-то невнимательно прочел или недопонял, но чем Вас не устраивает готовая ОС? Ведь уже проделан тяжелый, рутинный, нелегкий путь тем(и) кто создал(и) ОС. Зачем повторять эту тропу? Может быть взять результаты труда, тем более, что немало беслатных.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jan 17 2009, 14:42
Сообщение #18


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

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



Да уж действительно, зачем велосипед изобретать? На форуме куча RTOS разной весовой категории обсуждалась и, самое главное, по ним можно хоть советы получить, если что-то не так.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 17 2009, 15:17
Сообщение #19


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

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



Мне так показалось, что простенький менеджер будет получше карявок готовых.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Jan 17 2009, 15:27
Сообщение #20


Местный
***

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



Вам когда задачу ставят, вы тоже начинаете возмущаться - Да зачем это? Да нафиг надо? smile3009.gif
Да хоть просто из интереса. Почему бы не помочь человеку?
Может быть, человеку нужен именно велосипед, а не мотоцикл и не автобус wink.gif

А по теме - мне кажется, что описание scmRTOS (v2) вам ответит на все вопросы. Тем более, что написано очень приятным живым языком. Мне кажется, что почти в таком же ключе писались раньше научно-популярные книги smile.gif


Цитата(Папа Карло @ Jan 17 2009, 19:17) *
Мне так показалось, что простенький менеджер будет получше карявок готовых.

+1 Согласен с вами.

(Мой предыдущий пост - для двоих скептиков)
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 17 2009, 16:02
Сообщение #21


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

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



Цитата(SpyBot @ Jan 17 2009, 23:27) *
А по теме - мне кажется, что описание scmRTOS (v2) вам ответит на все вопросы. Тем более, что написано очень приятным живым языком. Мне кажется, что почти в таком же ключе писались раньше научно-популярные книги smile.gif

Одно непонятно: соглашаясь, что свое творение может быть лучше, чем "готовые корявки", Вы тут же рекомендуете руководство по одной из таких "корявок"! Этим самым Вы противоречите себе. Абсурд!

Цитата(SpyBot @ Jan 17 2009, 23:27) *
Вам когда задачу ставят, вы тоже начинаете возмущаться - Да зачем это? Да нафиг надо? smile3009.gif

Разве я или sergeeff возмущались?
Цитата(SpyBot @ Jan 17 2009, 23:27) *
Да зачем это? Да нафиг надо? smile3009.gif

Ну в таком тоне только Вы выразились! Я же аккуратно и мягко спросил, зачем проходить это проходить самому? Если есть интерес, да пожалуйста! Я это только поощряю! Сам изобретаю велосипеды порой. И знаю, что при этом можно замечательно научиться! Но может быть человек не знал об осях? Я же не знаю, его компетенции.

Цитата(Папа Карло @ Jan 17 2009, 23:17) *
карявок готовых.

Наверно Ваша будет сразу лучше всех!


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


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

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



SpyBot вообще дал для ознакомления RTOS, а не советовал её использовать, как я понял.

И потом простейший менеджер задач накидать проще чем ставить ОС чужую в МК.

Я уже на половину его написал, может отлажу сегодня же.

Просто хотелось мысли вообще по этому поводу услышать.

Ну и конечно, ссылки на простейшие RTOS с внятным описанием на Русском тоже приветствуются.

Псы
ОС-ки нужны именно под Keil, а то глянул на scmRTOS там порты под IAR, который я не люблю...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2009, 18:14
Сообщение #23


Гуру
******

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



Цитата(Папа Карло @ Jan 17 2009, 18:17) *
Мне так показалось, что простенький менеджер будет получше карявок готовых.

Вчера "разобрались" с FIQ, сегодня пишем лучший менеджер. Извините меня, конечно, за прямоту, но рановато пока.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 17 2009, 18:25
Сообщение #24


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

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



А вам не рановато советовать не разобравшись FIQ ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 17 2009, 18:34
Сообщение #25


Гуру
******

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



Мне нет. Тем более, что с FIQ во всех его видах я давно разобрался.
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 17 2009, 19:07
Сообщение #26


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

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



По вашим постам у меня сложилось мнение, что с FIQ вы ещё не разобрались...
Ну ничего я разберусь вам помогу wink.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 17 2009, 21:03
Сообщение #27


Гуру
******

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



Цитата(Папа Карло @ Jan 17 2009, 20:04) *
Я уже на половину его написал, может отлажу сегодня же.


Почти как в "Джентельменах удачи " - "Могу быть переводчиком, английский я уже знаю" smile.gif 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 17 2009, 21:34
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Папа Карло @ Jan 17 2009, 18:17) *
Мне так показалось, что простенький менеджер будет получше карявок готовых.
+1
конечно будет лучше, если Вы реально уже готовы написать лучше...
Это не подколка, если Вы чуствуете что можете сделать в СВОЕЙ КОНКРЕТНОЙ ЗАДАЧКЕ связки лучше чем
вам может предоставить любая OS, то и думать не стоит, никакая OS не знает что же Вы хотели изначально...

З.Ы. Я чужими OS стараюсь не пользоваться...
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 18 2009, 08:30
Сообщение #29


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

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



zltigo и aaarrr прошу не флудить в теме.
Выберете для своих умных постов другую тему пожалуйста.

Сообщение отредактировал Папа Карло - Jan 18 2009, 08:40
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 18 2009, 16:30
Сообщение #30


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

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



Столкнулся со странным для меня поведением компилятора.
Написал так:
Код
*P1++;


Где P1 - ссылка на переменную.

Подумал, что если поставить в начале знак *, то будет изменятся не указатель, а переменная и ++ добавит 1 к ней.
Но не добавил!

Подскажите - это компилятор такой или всё таки *P1++ не корректное выражение ?
Go to the top of the page
 
+Quote Post
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
aaarrr
сообщение Jan 20 2009, 21:04
Сообщение #46


Гуру
******

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



Цитата(Папа Карло @ Jan 20 2009, 21:49) *
Я не могу понять зачем там строка 1 и 3 ?

А что они делают понять можете?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 20 2009, 21:38
Сообщение #47


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

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



Возможно сбрасывают биты в 0 ?
Только, не задача, они и так на 0-ле...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 20 2009, 21:46
Сообщение #48


Гуру
******

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



Цитата(Папа Карло @ Jan 21 2009, 00:38) *
Только, не задача, они и так на 0-ле...

Прям всегда-всегда?
Go to the top of the page
 
+Quote Post
Папа Карло
сообщение Jan 21 2009, 08:27
Сообщение #49


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

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



Конечно гарантировать, что они всегда на 0-ле я не могу.
Но в программе я нигде не обращаюсь к ним.

Вообще, у меня пробегала мысль, что нужно сбросить бит, даже если они и так 0-вые.
В отладчике, то и так работает, без записи 0-лей.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 21 2009, 10:04
Сообщение #50


Гуру
******

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



Цитата(Папа Карло @ Jan 21 2009, 11:27) *
Вообще, у меня пробегала мысль, что нужно сбросить бит, даже если они и так 0-вые.

Это правильный подход: не стоит полагаться на значения, которые теоретически должны быть в регистре.
Go to the top of the page
 
+Quote Post

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

 


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


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