nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Apr 2024 15:08



Reply to topic  [ 105 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 7  Next
Клавиатура и NedoPC-90 
Author Message
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
SfS wrote:
Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?

Все только за! :D

_________________
Extreme Entertainment


17 Dec 2005 11:28
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
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). И еще под стек (задается пользователем).
Степень готовности - пока непонятна. Вроде работает - но требует длительной отладки.

Такие вот пироги. В общем если есть какие пожелания - пишите. Проще сейчас, пока модулей мало и структура ОС еще не полностью определена, пожелания учесть, чем потом чтото неучтенное мной в ОС через задний прозход вводить.


18 Dec 2005 19:47
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Mac Buster wrote:
SfS wrote:
Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?

Все только за! :D


Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.
Тема примерно такая "Последовательный интерфейс связи между устройствами. Аппаратно-программная поддержка."
И три части сделать.

1. Подробное описание последовательного протокола. Так сказать "чтобы дворнику понятно было".
2. Обзор возможностей AVR в этом плане. Описание аппаратного UART и работы с ним (с примером драйвера для ОС).
3. Эмуляция UART с помощью таймера и прерывания (типа подзаголовка "что делать если UARTов не хватает?"). Подробное описание как реализован программный UART, почему написан именно такой код, а не иной (там есть ньюансы в плане скорости).

Так же - предложения и замечания приветствуются. Пока идея вылеживается :)


18 Dec 2005 19:59
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Shaosу: ты как запустишь у себя клавиатуру с моим модулем - напиши что получилось. Может чтото подправить надо.
Кстати - я в свою клавиатуру воткнул разъем (от наушников, 3х-ногий). Очень удобно.
Ну и для красоты впендюрил над верхним рядом кнопок по бокам два светодиода (красный и зеленый), чтобы было видно подключена клавиатура или нет :) Фотку выложу на днях.


18 Dec 2005 20:03
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
Post 
SfS wrote:
Mac Buster wrote:
SfS wrote:
Кстати - может статью в следующий номер NedoPC тиснуть о написании программного UARTа и драйвера клавиатуры ? Никто не против ?

Все только за! :D


Насчет статьи идея такая. Не циклиться на клавиатуре. Там собственно ничего интересного нет - просто таблица перекодировки и все. Вся соль была - скорость подобрать и коди клавишь выписать.
Тема примерно такая "Последовательный интерфейс связи между устройствами. Аппаратно-программная поддержка."
И три части сделать.

1. Подробное описание последовательного протокола. Так сказать "чтобы дворнику понятно было".
2. Обзор возможностей AVR в этом плане. Описание аппаратного UART и работы с ним (с примером драйвера для ОС).
3. Эмуляция UART с помощью таймера и прерывания (типа подзаголовка "что делать если UARTов не хватает?"). Подробное описание как реализован программный UART, почему написан именно такой код, а не иной (там есть ньюансы в плане скорости).

Так же - предложения и замечания приветствуются. Пока идея вылеживается :)


Принимается. Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).

_________________
:dj: https://mastodon.social/@Shaos


18 Dec 2005 21:57
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Shaos wrote:
Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).

Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...

_________________
Extreme Entertainment


18 Dec 2005 23:32
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Mac Buster wrote:
Shaos wrote:
Только еще опиши поподробнее пример с общением между PC и AVR по последовательному порту (со стороны PC к примеру будем иметь HyperTerminal).

Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...


Лично я пользуюсь линуксовой самописной програмулиной. Окно терминала делится на две части. В верхнюю идет весь ввод с клавиатуры и по Enterу выводится в ком-порт. В нижнюю отабражается весь ввод с компорта. Примитивно и просто. Но для устройств, где на компорту только Rx и Tx - вполне подходит. Впрочем дописать ее нетрудно. Могу выложить, если надо.


19 Dec 2005 00:44
Profile
Fanat

Joined: 21 Nov 2002 11:09
Posts: 88
Location: E-burg/Russia
Reply with quote
Post 
Mac Buster wrote:
Ни кто не знает достойной замены Hyper Terminal-у ? Что-то он мне страшно не нравится...
Лично я пользуюсь терминалкой Tera Term Pro.
Скачать вместе с исходниками можно отсюда:
http://www.vector.co.jp/authors/VA002416/teraterm.html


19 Dec 2005 01:58
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
Post 
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.

В общем "на посмотреть" все работает - но кое что еще буду править. Всетаки за несколько часов все не отладить :)


А оно у меня не собирается :(

Quote:
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

_________________
:dj: https://mastodon.social/@Shaos


20 Dec 2005 23:10
Profile WWW
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Shaos wrote:
А оно у меня не собирается :(

Quote:
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


Очевидно по какойто причине не подключается файл 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

Это навскидку. попробуешь - скажи что получилось. И под что собираешь конкретно ?


21 Dec 2005 03:02
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
Post 
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

Это навскидку. попробуешь - скажи что получилось. И под что собираешь конкретно ?


Все тоже. Я просто собираю то что в архиве. В makefile поправил только -I к инклудникам AVR-a.

_________________
:dj: https://mastodon.social/@Shaos


21 Dec 2005 07:00
Profile WWW
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
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>

Это некорректно, но поможет установить где собака зарыта. И собрать программу.


21 Dec 2005 19:32
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Shaos wrote:
...


И еще - закинь мне сюда свой мэйкфайл. Точнее его начало - все где ты изменения вносил.

Кстати - ты именно под 90s8535 собираешь или под мегу8535 ? Могут быть какието отличия.

Я писал тест только под 90s8535 нимало не заботясь о совместимости с другими процами на данном этапе.


21 Dec 2005 19:37
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22567
Location: Silicon Valley
Reply with quote
Post 
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>

Это некорректно, но поможет установить где собака зарыта. И собрать программу.


Старая версия AVROS ведь у меня нормально собиралась - я с тех пор ничего не менял:

binutils-2.13.2.1
gcc-3.2.3
avr-libc-20020203

да - у меня есть TCNT1L и TCNT1H и нет TCNT1, и точно также есть OCR1AL и OCR1AH и нет OCR1A - вроде в старом коде в этом смысле все Ок было...

_________________
:dj: https://mastodon.social/@Shaos


21 Dec 2005 19:39
Profile WWW
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
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. я бы сейчс проверил все.


21 Dec 2005 19:43
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 105 posts ]  Go to page Previous  1, 2, 3, 4, 5 ... 7  Next

Who is online

Users browsing this forum: No registered users and 9 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.