AVR + Pascal (?)

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

BCluster писал(а):Можно выбрать хороший труд и перевести, думаю многим будет полезно
На крупные формы не замахиваюсь, а несколько небольших, но интересных статей перевел, так сказать, для внутреннего пользования. Если интересно, могу накидать ссылок.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

Было бы неплохо )
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

Пока вот что попало под руку:

Развитие в направлении разработки встроенных систем.
Эффективная разработка встроенного ПО через тестирование.
Сопрограммы в языке программирования C.
Оптимизация: ваш злейший враг.
Рекомендации IEEE по разработке требований к программному обеспечению (части 1, 2, 3).

Ну и, если любите полистать классику, кое-что из моих прежних переводов Дейкстры:

Программирование как вид человеческой деятельности. (EWD117)
Конец Информатики?
О природе информатики.
Ответы на вопросы студентов отделения программного обеспечения (EWD1305).
Навстречу корректным программам (EWD241).
Смиренный программист (EWD340).
Почему американская информатика кажется неизлечимой (EWD1209).
Почему программное обеспечение такое дорогое? (EWD648).
Два взгляда на программирование (EWD540).
Научная фантастика и научная реальность в информатике (EWD952).

Остальное нужно поискать.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Я специально линки там не привожу во избежания наездов по поводу пиратства. Тем более что наши соотечественники в последнее время тоже грешат копирастией
:facepalm:
James W. Grenning, Test Driven Development for Embedded C и Mark VanderVoord, Embedded Testing with Unity and CMock
До такого я еще не дорос. :)

Спасибо, если совсем туго будет - напишу.
А у нас, старых инженегров, в сленге нормально проходило.
Видимо, это как где... Ни разу не слышал, хотя имел возможность лично общаться с Ъ-советским инженером, от которого, кстати, много почерпнул. :dont_know:
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

YS писал(а):Есть.

Но для эмбеда Паскаль подходит плохо. Он слишком академичен (разрабатывался-то изначально для обучения), и потому многое из того, что на С делается естесственно, на нем необходимо делать с костылями.
Хотел-бы ради интереса увидеть то, что можно легко сделать на СИ и с костылями на PASCAL-е, например, хотел бы увидеть "естественный" код под mega8, который бы с трудом портировался под все то-же паскаль.

Вопрос выбора среды разработки очень философский )

Что касается микропаскаля, то он готов решать более 99% прикладных задач.
Контактная информация:
Реклама
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Хотел-бы ради интереса увидеть то, что можно легко сделать на СИ и с костылями на PASCAL-е
Я уже приводил пример.

Код: Выделить всё

((void (*)(uint8_t**,uint8_t))pgm_read_word(&(sys_func[i])))(arg_ptr,args_num);
Промотайте тему назад - пример реальный. Кусок кода моей самописной командной оболочки.

Сия строка по номеру выбирает из массива, находящегося во FLASH, два байта - указатель на функцию, после чего передает ей управление; функция принимает два параметра: первый - указатель на массив строк (null-terminated, соглашение Си), второй - количество этих строк. Притом сей код, несмотря на странноватый вид, совершенно портируем.

Мне интересно увидеть решение этой задачи на Паскале (желательно так же в одну строчку) без использования костылей. :)))
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Реклама
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15

Сообщение vovksextra »

YS писал(а):
Хотел-бы ради интереса увидеть то, что можно легко сделать на СИ и с костылями на PASCAL-е
Я уже приводил пример.

Код: Выделить всё

((void (*)(uint8_t**,uint8_t))pgm_read_word(&(sys_func[i])))(arg_ptr,args_num);
......

Код: Выделить всё

type

  // описали типы;

  read_word = function(arg_ptr: ^char;args_num: byte): word ;
  p_read_word = ^read_word;
  
var
  sys_func: array [10] of p_read_word;



и где-то в коде вызвали одну строчку

sys_func[0](nil,10);




Типа того ))
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

YS писал(а):
pgm_read_word
...
Притом сей код, несмотря на странноватый вид, совершенно портируем.
этот фрагмент не портируем :)))))
Контактная информация:
YS
Друг Кота
Аватара пользователя
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05

Сообщение YS »

Типа того ))
Нет. pgm_read_word() - библиотечная функция, которая извлекает число из FLASH. Да-да, если бы указатели лежали в RAM, проблемы бы не было.

Или mikroPascal умеет сам подставлять нужный код при чтении из FLASH (как IAR)?

Т.е., мы читаем число, быстренько преобразуем его к типу "указатель на функцию" с нужным форматом аргументов, и вызываем ее.
arg_ptr: ^char
arg_ptr - указатель на массив указателей на char, а не просто на char.
этот фрагмент не портируем
Ой ли? ОК, пускай у нас IAR, который умеет читать напрямую. Пишем строчку

Код: Выделить всё

#define pgm_read_word(ARG)    (*(ARG))
и все - код работает как и раньше.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

ok, уговорили :)))
Контактная информация:
Родился
Сообщения: 18
Зарегистрирован: Ср авг 01, 2012 05:14:12

Сообщение shtela »

Привет всем!
Помогите, пожалуйста - никак не могу считать значения минут из ds1307. Секунды считываются нормально, а минуты - выдаёт полный бред, который к тому же не меняется. Схему моделирую в Proteus. Процедура считывания ниже.
Спасибо.
Сергей


Procedure Clock_Read(Var sec_p,min_p,hour_p:byte);
Begin
TWI_Start();
TWI_Write(0xD0); // Address ds1307 --- запись
TWI_Write(0x00); // Установка записи/чтения регистра 00h
TWI_Start();
TWI_Write(0xD1); // Address ds1307 --- чтение
sec_p:=TWI_Read(0); // чтение регистра секунд 00h
sec_p:=((sec_p and %11110000) shr 4)*10 + (sec_p and %00001111); // преобразование считанного значения из регистра
min_p:=TWI_Read(1); // чтение регистра минут 01h
min_p:=((min_p and %11110000) shr 4)*10 + (min_p and %00001111); // преобразование считанного значения из регистра
TWI_Stop();
end;
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

Ошибка здесь: sec_p:=TWI_Read(0); // чтение регистра секунд 00h
Вы выполняете чтение из регистра и посылаете NO_ACK, после чего дальнейшее чтение невозможно, в таком случае нужно делать стоп-старт, итд.
Нужно вызывать TWI_Read() все время с параметром =1, и только последний раз с параметром=0. А у Вас все наоборот.
Вот так сделайте:
sec_p:=TWI_Read(1); // чтение регистра секунд 00h и посылка ACK
sec_p:=((sec_p and %11110000) shr 4)*10 + (sec_p and %00001111); // преобразование считанного значения из регистра
min_p:=TWI_Read(0); // чтение регистра минут 01h и посылка NOT ACK
Все будет только лучше, в крайнем случае - хуже.
Родился
Сообщения: 18
Зарегистрирован: Ср авг 01, 2012 05:14:12

Сообщение shtela »

Спасибо, работает
Ответить

Вернуться в «AVR»