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

2 zltigo: теперь и я увидел насколько все плохо :crying: по правде сказать я эти исходники толком не смотрел, но конструкции и правда нелепые.

кстати в вашем варианте видимо нужно вставить обнуление двух последних битов -четности (9) и стопового (10), последний всегда =1.

и еще объясните невежде что делает последняя строчка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...теперь и я увидел насколько все плохо

Это далеко не самый дивный код - посмотрите любимый многими LCD 2x16 вот там полный отвал башки.

кстати в вашем варианте видимо нужно вставить обнуление двух последних битов -четности (9) и стопового (10), последний всегда =1.

Они обнулены изначально в 32bit переменной data и обнуляются после приема последовательности. При использовании их просто обрезать, что и делается для stop. Можете сдвинуть еще на один бит и обрезать четность, но лучше оставить и анализировать/отсеивать потом по полному коду. Естественно, при нормальном подходе к делу их нужно контролировать - я не добавлял контроль start/stop, поскольку ставил целью просто повторить функционал и дать почувствовать разницу.

и еще объясните невежде что делает последняя строчка?

То-же самое,что у Редькина 3 строчки:

  U32 dum=0;
//разрешить следующее прерывание IRQ1
  dum =AT91C_BASE_PIOA->PIO_ISR;
  dum =dum; //чтобы не генерировалось замечание о неиспольз переменной

AT91C_BASE_PIOA->PIO_ISR это volatile, посему компилятор не может выкинуть обращение к PIO_ISR и будет произведено чтение "в никуда", что и требовалось.

Кстати, неиспользуемые переменные, например передаваемые аргументы, эффектнее заглушать так:

(void)dum;

Для читабельности можно макросик пользовать:

#define USED(foo)    (void)(foo)
USED( dum );

Изменено пользователем zltigo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, неиспользуемые переменные, например передаваемые аргументы, эффектнее заглушать так:

(void)dum;

Для читабельности можно макросик пользовать:

#define USED(foo)    (void)(foo)
USED( dum );

 

ясно...спасибо

 

кстати, хорошо бы стелать рубрику "полезные советы" :) и добавлять туда такие кусочки кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для читабельности можно макросик пользовать:

USED( dum );

Для читабельности лучше обозвать "ignore".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да. Эта книга "" будет полезна только как datasheet на русском языке, а про работу с IAR и примеры на С лучше пропустить - дабы мозг свой не засорять.

В качестве скромного примера как писать на языке Си, могу приложить написанную мной библиотеку для работы с LCD 4470, правда для AVR.

А в качестве учебника по языку Си кроме оригинального учебника лучше ничего не видел, в нём всё грамотно и достаточно просто описано (файл прилагается)

lcd.rar

Kernighan_Ritchie__C_programming_Language__rus.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В качестве скромного примера как писать на языке Си, могу приложить написанную мной библиотеку для работы с LCD 4470

О Господи! Ну не надо так писать на С. Начиная с того, что это никак не "библиотека", извращеного использования хидера, мрачных 0bXXXXXX и совсем не сишных, "задержек от фонаря", asm( "nop" ), именования перменных и функций заглавными буквами, и прочего прочего... При этм тупейшая, лобовая работа с собственно 4470, ни разных режимов, ни опроса готовности, ни загрузки знакогенератора, ни чтения, ни сколь-нибудь реальных диаграмм (для нормального ARM там повылезают требования по выдержке сотен наносекунд )....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О Господи! ... тупейшая, лобовая работа с собственно 4470, ни разных режимов, ни опроса готовности, ни загрузки знакогенератора, ни чтения, ни сколь-нибудь реальных диаграмм (для нормального ARM там повылезают требования по выдержке сотен наносекунд )....

Не сочтете ли Вы возможным, в качестве позитивной части обсуждения, выложить код (по возможности с комментариями), как надо делать? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не сочтете ли Вы возможным...

Что делать? Писать на С, или работать с LCD? Это в общем-то разные вещи. Если речь идет о поминаемой "библиотеке", то там комментировать и править совершенно нечего - все с 0. Если о C - то есть хорошие книги - по тому-же стилю поминал на форуме недавно Ритчи и Пайка...

Если о том,как с текстовой железякой LCD работать - пожалуй могу несколько кусочков выложить - приходилось как-то один раз работать - результаты оформленные ввиде заготовки сохранены.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О Господи! Ну не надо так писать на С. Начиная с того, что это никак не "библиотека", извращеного использования хидера, мрачных 0bXXXXXX и совсем не сишных, "задержек от фонаря", asm( "nop" ), именования перменных и функций заглавными буквами, и прочего прочего... При этм тупейшая, лобовая работа с собственно 4470, ни разных режимов, ни опроса готовности, ни загрузки знакогенератора, ни чтения, ни сколь-нибудь реальных диаграмм (для нормального ARM там повылезают требования по выдержке сотен наносекунд )....

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О Господи! Ну не надо так писать на С. Начиная с того, что это никак не "библиотека", извращеного использования хидера, мрачных 0bXXXXXX и совсем не сишных, "задержек от фонаря", asm( "nop" ), именования перменных и функций заглавными буквами, и прочего прочего... При этм тупейшая, лобовая работа с собственно 4470, ни разных режимов, ни опроса готовности, ни загрузки знакогенератора, ни чтения, ни сколь-нибудь реальных диаграмм (для нормального ARM там повылезают требования по выдержке сотен наносекунд )....

Не судите строго - я самоучка, спросить совершенно некого. Может у меня книги плохие были?... Учился сначала по "учебнику" по AVRам, Голубцов вроде автор был. Но недавно осозал что лучше родных даташитов ничего не найдёшь....

А заголовочник для 4470 отлично работает, задержки для тактовой частоты 14 МГц. Функция проверки готовности BF_READ()... Можно было готовый заголовочник взять, но захотелось попрактиковаться.

И опять же по поводу книг, кроме книги Редькина по ARMам на русском языке ничего не нашёл :-/

Хотелось бы посмотреть на вашу библиотеку для LCD.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

В АВР задержки через таймер расточительно. Но задержки это самая малая часть проблемы. Вы в заголовочном файле размещаете не инлайновые функции и переменные! Представьте ситуацию, что вывод на LCD потребуется сделать из двух модулей - вы подключите этот заголовок в каждый модуль и в результате получите все функции и переменные в двух экземплярах. Естественно линкер будет нецензурно ругаться. Правда CV сам не стандартный и линкера не имеет вовсе, вот и появляются на свет такие странные конструкции. Если Вас устраивает - пользуйтесь, но никому не показывайте. :)

Кстати двоичной записи в стандарте C нет. Вы книжку то почитайте...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы посмотреть на вашу библиотеку для LCD.

Могу дать, только это не претендует на некую супер библиотеку, это просто аккуратно с пониманием того, что делается написанный код, который при необходимости достаточно легко модифицируется под разные условия использования и разное железо. Писался вкупе с лабораторной работой и меню в свое время где-то за субботний день, потом по мелочи добавлялся.... Для публикации не предназначался. Предназначается в текущем виде для LPC2000. На вопросы, в том числе и каверзные могу ответить :)

lcd_z.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В АВР задержки через таймер расточительно. Но задержки это самая малая часть проблемы. Вы в заголовочном файле размещаете не инлайновые функции и переменные! Представьте ситуацию, что вывод на LCD потребуется сделать из двух модулей - вы подключите этот заголовок в каждый модуль и в результате получите все функции и переменные в двух экземплярах. Естественно линкер будет нецензурно ругаться. Правда CV сам не стандартный и линкера не имеет вовсе, вот и появляются на свет такие странные конструкции. Если Вас устраивает - пользуйтесь, но никому не показывайте.

Кстати двоичной записи в стандарте C нет. Вы книжку то почитайте...

 

Почему через таймер расточительно? а как же тогда? если задержка к примеру 30ms?

 

Про модуль не совсем понял. Вы про то, что надо в начале написать чтото вроде:

#if !defined(LCD.h)

#define LCD.h

......

#endif

 

А насчёт двоичной записи- мне так проще было с флагами эксперементировать :laughing:

 

... а книгу по ARMам я так и не нашёл(... Редькин не в счёт

Может хоть ссылка у кого есть? В частности хотелось бы понять как в AT90 Linux запихать и как потом с этим управляться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

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

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...