BCluster писал(а):Можно выбрать хороший труд и перевести, думаю многим будет полезно
На крупные формы не замахиваюсь, а несколько небольших, но интересных статей перевел, так сказать, для внутреннего пользования. Если интересно, могу накидать ссылок.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Я специально линки там не привожу во избежания наездов по поводу пиратства. Тем более что наши соотечественники в последнее время тоже грешат копирастией
James W. Grenning, Test Driven Development for Embedded C и Mark VanderVoord, Embedded Testing with Unity and CMock
До такого я еще не дорос.
Спасибо, если совсем туго будет - напишу.
А у нас, старых инженегров, в сленге нормально проходило.
Видимо, это как где... Ни разу не слышал, хотя имел возможность лично общаться с Ъ-советским инженером, от которого, кстати, много почерпнул.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Но для эмбеда Паскаль подходит плохо. Он слишком академичен (разрабатывался-то изначально для обучения), и потому многое из того, что на С делается естесственно, на нем необходимо делать с костылями.
Хотел-бы ради интереса увидеть то, что можно легко сделать на СИ и с костылями на PASCAL-е, например, хотел бы увидеть "естественный" код под mega8, который бы с трудом портировался под все то-же паскаль.
Вопрос выбора среды разработки очень философский )
Что касается микропаскаля, то он готов решать более 99% прикладных задач.
Промотайте тему назад - пример реальный. Кусок кода моей самописной командной оболочки.
Сия строка по номеру выбирает из массива, находящегося во FLASH, два байта - указатель на функцию, после чего передает ей управление; функция принимает два параметра: первый - указатель на массив строк (null-terminated, соглашение Си), второй - количество этих строк. Притом сей код, несмотря на странноватый вид, совершенно портируем.
Мне интересно увидеть решение этой задачи на Паскале (желательно так же в одну строчку) без использования костылей.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
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);
Привет всем!
Помогите, пожалуйста - никак не могу считать значения минут из 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;
Ошибка здесь: 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