Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Клавиатура и NedoPC-90
Moderator: Shaos
-
Mac Buster
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
Еще не все. Драйвер сырой. И ОС тоже надо поставить переработанную.Shaos wrote: Теперь у нас все есть, чтобы воплотить проект NedoPC-PROTO2 в жизнь! Статью конечно пиши - опубликуем.
Попробую так сказать по пунктам.
1. В протоколе обмена клавиатуры есть еще как я понял бит четности, но я его пока не обрабатываю пока, хотя и учитываю.
2. Модуль поддержки клавиатуры плонирую разбить на два модуля - "модуль программной эмуляции UART" (полного UART - с поддержкой разных длин символов, четности, разного кол-ва старт-стопов) и собственно "модуль 40кнопочной клавиатуры". Таким образом убъются два зайца - заяц 1й - можно будет с помощю макросов указать - программный или аппаратный UART используется, и - заяц 2й - программный UART можно будет использовать не только для поддержки клавиатуры, но и для других нужд, коли возникнет нужда.
3. Сейчас веду работы по доработке ОС до версии 1.0. Что делается и планируется.
а) Создание интерактивного конфиг-скрипта (наподобие как для линуксового ядра). То есть набираем "make config", на что выдается серия вопросов с подсказками, на которые пользователь вводит ответы (свои или по умолчаию). В результате формируются для каждого модуля файлы конфигурации. Главное достоинство - абсолютно единообразный формат входных файлов для конфиг-скрипта. Уже почти завершено (процентов на 70-80).
б) Изменение структуры каталогов. Теперь каждый проект будет хранится в отдельном подкаталоге ../upl/<имя проекта>. Там же сохраняются все текущие настройки для данного проекта. И там же при компиляции сохраняются временные объектные файлы. Плюсы такого подхода очевидны. Таким образом для многих проектов будет достаточно всего лишь одной копии системы. Ну и простое удобство - глянул в каталог upl и сразу видно - какие проекты есть. Тоже почти готово.
в) Реализация многозадачности. Планирую отказаться от простого фонового цикла, а все пользовательские задачи свести в список и выделять по некоему кванту времени на задачу. Если задача пользователя всего одна - то формировать простой фоновый цикл. Если же несколько - то переключать их по таймеру. Цель - исключить длительные ожидания при выполнении долгих процессов. При этом приоритеты драйверов будут всегда выше приоритетов фоновых задач.
Для пользователя это все выглядит примерно так:
// Определения задач
ttask task0(){/* код задачи 0 */}
ttask task1(){/* код задачи 1 */}
ttask task2(){/* код задачи 2 */}
// Начало списка
USER_TASK_LIST_BEGIN()
USER_TASK_LIST_ADD(task0, stk_size) /*Добавляем задачу 0 в список*/
USER_TASK_LIST_ADD(task1, stk_size) /*Добавляем задачу 1 в список*/
USER_TASK_LIST_ADD(task2, stk_size) /*Добавляем задачу 2 в список*/
// конец списка
USER_TASK_LIST_END()
Правда не следует злоупотреблять этим. Для каждой задачи (если их больше 1й) надо 35байт под регистры (32РОН + 2б SP + SREG). И еще под стек (задается пользователем).
Степень готовности - пока непонятна. Вроде работает - но требует длительной отладки.
Такие вот пироги. В общем если есть какие пожелания - пишите. Проще сейчас, пока модулей мало и структура ОС еще не полностью определена, пожелания учесть, чем потом чтото неучтенное мной в ОС через задний прозход вводить.
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.Mac Buster wrote:Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Тема примерно такая "Последовательный интерфейс связи между устройствами. Аппаратно-программная поддержка."
И три части сделать.
1. Подробное описание последовательного протокола. Так сказать "чтобы дворнику понятно было".
2. Обзор возможностей AVR в этом плане. Описание аппаратного UART и работы с ним (с примером драйвера для ОС).
3. Эмуляция UART с помощью таймера и прерывания (типа подзаголовка "что делать если UARTов не хватает?"). Подробное описание как реализован программный UART, почему написан именно такой код, а не иной (там есть ньюансы в плане скорости).
Так же - предложения и замечания приветствуются. Пока идея вылеживается
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
Shaosу: ты как запустишь у себя клавиатуру с моим модулем - напиши что получилось. Может чтото подправить надо.
Кстати - я в свою клавиатуру воткнул разъем (от наушников, 3х-ногий). Очень удобно.
Ну и для красоты впендюрил над верхним рядом кнопок по бокам два светодиода (красный и зеленый), чтобы было видно подключена клавиатура или нет
Фотку выложу на днях.
Кстати - я в свою клавиатуру воткнул разъем (от наушников, 3х-ногий). Очень удобно.
Ну и для красоты впендюрил над верхним рядом кнопок по бокам два светодиода (красный и зеленый), чтобы было видно подключена клавиатура или нет
-
Shaos
- Admin
- Posts: 24361
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Принимается. Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).SfS wrote:Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.Mac Buster wrote:Все только за!SfS wrote:Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?
Тема примерно такая "Последовательный интерфейс связи между устройствами. Аппаратно-программная поддержка."
И три части сделать.
1. Подробное описание последовательного протокола. Так сказать "чтобы дворнику понятно было".
2. Обзор возможностей AVR в этом плане. Описание аппаратного UART и работы с ним (с примером драйвера для ОС).
3. Эмуляция UART с помощью таймера и прерывания (типа подзаголовка "что делать если UARTов не хватает?"). Подробное описание как реализован программный UART, почему написан именно такой код, а не иной (там есть ньюансы в плане скорости).
Так же - предложения и замечания приветствуются. Пока идея вылеживается
-
Mac Buster
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
Лично я пользуюсь линуксовой самописной програмулиной. Окно терминала делится на две части. В верхнюю идет весь ввод с клавиатуры и по Enterу выводится в ком-порт. В нижнюю отабражается весь ввод с компорта. Примитивно и просто. Но для устройств, где на компорту только Rx и Tx - вполне подходит. Впрочем дописать ее нетрудно. Могу выложить, если надо.Mac Buster wrote:Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...Shaos wrote:Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).
-
Caro
- Fanat
- Posts: 88
- Joined: 21 Nov 2002 11:09
- Location: E-burg/Russia
Лично я пользуюсь терминалкой Tera Term Pro.Mac Buster wrote:Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...
Скачать вместе с исходниками можно отсюда:
http://www.vector.co.jp/authors/VA002416/teraterm.html
-
Shaos
- Admin
- Posts: 24361
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А оно у меня не собираетсяSfS wrote:Вот тут лежит версия NedoPC-90.AVROS с поддержкой клавиатурки.
http://www.nedopc.org/nedopc/upload/Ned ... st.tar.bz2
Она полностью сконфигурирована для тестовой программки по AT90S8535. Программка читает символ с клавиатуры и
(с учетом CapsLook и Fn) выводит его в поледовательный порт.
Клавиатура подключается к ноге INT0 процессора.
Коды всех служебных клавиш можно посмотреть в файле ../hl/keypad40.h
Схема сопряжения и коды всех клавиш лежат в ../hl/doc.hl/keypad40.txt
Также добавлен модуль поддержки таймера-1.
Клавиатура пока работает только через программный UART, который настроен только на прием (в общем не UART, а UAR).
Как появится макет с двумя UARTами добавлю поддержку клавиатуры через аппаратный UART.
В общем "на посмотреть" все работает - но кое что еще буду править. Всетаки за несколько часов все не отладить
In file included from hl/timer0.c:6,
from hl/__tmpsrc__.c:2:
/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
make: *** [create_hl] Ошибка 1
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
Очевидно по какойто причине не подключается файл io8535.h. Или ты под что его собрать пытаешься ?Shaos wrote: А оно у меня не собирается
In file included from hl/timer0.c:6,
from hl/__tmpsrc__.c:2:
/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
make: *** [create_hl] Ошибка 1
Попробуй в Makefile дописать
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \ # удалить !!!!
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include ina90.h # добавить !!!
Или напрямую
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include io8535.h \
--include pgmspace.h
Это навскидку. попробуешь - скажи что получилось. И под что собираешь конкретно ?
-
Shaos
- Admin
- Posts: 24361
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Все тоже. Я просто собираю то что в архиве. В makefile поправил только -I к инклудникам AVR-a.SfS wrote:Очевидно по какойто причине не подключается файл io8535.h. Или ты под что его собрать пытаешься ?
Попробуй в Makefile дописать
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \ # удалить !!!!
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include ina90.h # добавить !!!
Или напрямую
AVR-INC= -I/usr/include/avr \
--include avr/io.h \
--include system/compincs.h \
--include system/sysdef.h \
--include string.h \
--include stdio.h \
--include stdlib.h \
--include io8535.h \
--include pgmspace.h
Это навскидку. попробуешь - скажи что получилось. И под что собираешь конкретно ?
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
хм..хм...Shaos wrote:/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
Слушай - напиши свою версию avr-glibc.
Далее - проверь в инклюднике /usr/include/avr/avr/io8535.h наличие определенй:
* Timer/Counter 1 */
#define TCNT1 _SFR_IO16(0x2C)
#define TCNT1L _SFR_IO8(0x2C)
#define TCNT1H _SFR_IO8(0x2D)
/* Timer/Counter1 Output Compare Register A */
#define OCR1A _SFR_IO16(0x2A)
#define OCR1AL _SFR_IO8(0x2A)
#define OCR1AH _SFR_IO8(0x2B)
Маловероятно, но может быть у тебя макросы регистров подругому определены. Имена в смысле другие.
Если все это есть - попробуй в файл ../system/sysdef.h
перед самым первым инклюдом добавить строчки
#include <avr/io8535.h>
#include <avr/pgmspace.h>
Это некорректно, но поможет установить где собака зарыта. И собрать программу.
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
-
Shaos
- Admin
- Posts: 24361
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Старая версия AVROS ведь у меня нормально собиралась - я с тех пор ничего не менял:SfS wrote:хм..хм...Shaos wrote:/usr/include/avr/signal.h:7:2: warning: #warning "please include sig-avr.h instead"
In file included from hl/__tmpsrc__.c:14:
hl/keypad40.c: In function `keypad40_puart_init':
hl/keypad40.c:42: invalid lvalue in assignment
hl/keypad40.c: In function `keypad40_puart_int_handler':
hl/keypad40.c:56: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:56: (Each undeclared identifier is reported only once
hl/keypad40.c:56: for each function it appears in.)
hl/keypad40.c:57: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_puart_timer_handler':
hl/keypad40.c:74: `OCR1A' undeclared (first use in this function)
hl/keypad40.c:75: `TCNT1' undeclared (first use in this function)
hl/keypad40.c: In function `keypad40_getch':
hl/keypad40.c:221: warning: implicit declaration of function `pgm_read_byte'
Слушай - напиши свою версию avr-glibc.
Далее - проверь в инклюднике /usr/include/avr/avr/io8535.h наличие определенй:
* Timer/Counter 1 */
#define TCNT1 _SFR_IO16(0x2C)
#define TCNT1L _SFR_IO8(0x2C)
#define TCNT1H _SFR_IO8(0x2D)
/* Timer/Counter1 Output Compare Register A */
#define OCR1A _SFR_IO16(0x2A)
#define OCR1AL _SFR_IO8(0x2A)
#define OCR1AH _SFR_IO8(0x2B)
Маловероятно, но может быть у тебя макросы регистров подругому определены. Имена в смысле другие.
Если все это есть - попробуй в файл ../system/sysdef.h
перед самым первым инклюдом добавить строчки
#include <avr/io8535.h>
#include <avr/pgmspace.h>
Это некорректно, но поможет установить где собака зарыта. И собрать программу.
binutils-2.13.2.1
gcc-3.2.3
avr-libc-20020203
да - у меня есть TCNT1L и TCNT1H и нет TCNT1, и точно также есть OCR1AL и OCR1AH и нет OCR1A - вроде в старом коде в этом смысле все Ок было...
-
SfS
- Doomed
- Posts: 491
- Joined: 16 Apr 2005 22:35
- Location: Томск
попробуй строчку инклюдников.Shaos wrote: Старая версия AVROS ведь у меня нормально собиралась - я с тех пор ничего не менял:
binutils-2.13.2.1
gcc-3.2.3
avr-libc-20020203
AVR-INC= -I/usr/include/avr --include avr/io.h --include avr/ina90.h --include system/sysdef.h --include string.h --include stdio.h --include stdlib.h
вместо той, что у тебя.
Это единственное что я менял в мэкфайле.
Блин - жалко на работе нету сейчас рабочего avr-gcc. я бы сейчс проверил все.
