CnCLab Forums
Сайт Помощь Вход Регистрация  Добро пожаловать, Гость.

» Форумы » SourceCode Orange Orange5 Omega CarRadio Car Creative Other xBuy

Cтраницы: [ 2 1 ] Архив

8. michman  Краснодарский край,Славянск-на-Кубани | Member | 6.11.16 13:32  

Контроллер РС-165D-220/220
Прошу не пинать- я "нуль без палочки" :) Возникла необходимость имея контроллер РС-165D-220/220 (Контроллер регулирования температуры сети отопления и ГВС-номер 6 kontel.ru/index.php?route=information/information&information_id=26 скачать прошивку и засунуть в такой же под номером 3. Программа flip,процессор Atmel AT89C51ED2,программатор на max232. Подключаюсь к rx tx,замыкаю на общий PSEN - получаю конект.Пробую скачать- ругается "timeout error" .Что неправильно делаю




7. aleksej_27  г.Омск www.mercedesinstrument.com | Advanced | 13.10.16 15:12    +7

Повесть об одном байте
Повесть об одном байте . /11.09.2003/
Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит состоит. Что?
Hет, я не псих, хотя одному богу известно, сколь тонкой была граница отделявшая меня от
этого состояния. Hо все по порядку.
Я программер. Но не просто программер. Я принадлежу к касте, которую иногда
называют системщиками, иногда кристальщиками. Вы знаете, что это такое? Я объясню,
если потерпите. Мне никак не обойтись без специфики, но иначе вы не сможете понять
дальнейшее.
Мы программируем чипы однокристаллки, грубо говоря, это когда весь комп в одном
кристалле. Программная память и память данных разделены и не взаимодействуют между
собой. Программа не может быть запущена в оперативке. Глубина программного стека
ограничена. Максимум на что я могу рассчитывать, это восемь уровней вложения, причем
я не могу изменять предельную глубину стека. О, вы не подумайте чего! У меня бездна
ресурсов. Оперативки аж 128 байт! Это на все про все. Переменные, там то да се..
Представили, да? С программной памятью тоже неплохо. Аж восемь килобайт. И
пользоваться ей совсем несложно. Сначала нужно программно врубить нужный банк
памяти, запустить в нем нужную процедуру, а по выходе из нее не забыть вернуться где
был. Да еще надо иметь в виду, что в пределах банка я могу перемещаться только
джампами и вызовами процедур, а переходы по условиям возможны только в пределах
одной страницы, т.е. 256 байт.
Это значит, если я сравниваю два байта и надо ветвиться, но если метка не находится в
пределах 256 байт, то это письмо на деревню дедушке, причем компилятор только в
половине случаев предупредит, мол, широко шагаешь парень, штаны бы поберег. И это
только цветочки! Ягодки я вам сейчас выложу, что б вы ими в полной мере могли
насладиться. У меня нет команды вычитания. Вообще! только add. Уж про такую
роскошь, как умножение или деление я вообще молчу, это для лентяев. Зато мне нужно
обеспечить десятичную математику. Вы проникаетесь потихоньку? Коды таких игрушек
вылизываются так, что вам и не снилось, особенно если приходиться решать задачи на
пределе оперативной и программной памяти. Исходники переписываются далеко не один
раз. Мне мало просто решить задачу. Я должен впихнуть ее в этот чертов кристалл!
Ограничение по переменным, по размеру кода в целом, по размеру каждой процедуры и
по числу вызовов. Малейший недосмотр и.. стек продавлен, и тебя вышвыривает черт
знает куда. И компилятор не поможет. Такое он не ловит.. Вы думаете это все? ;-) H-е-ет,
дорогие мои. Моя игрушка работает в реалтайме.. Это когда, напротив каждой крохотной
процедурки моего кода нужно подсчитать и проставить время ее исполнения в
миллисекундах. Мои модули не должны работать более жестко фиксированного времени,
потому, что мне надо еще сканировать киборду и дисплей, поспевать за датчиками и
выдавать управляющие сигналы, а все остальное должно работать никак не мешая
сканнингу, иначе я прозеваю нажатие кнопки, или дисплей станет неприятно мерцать,
меняя яркость. Но и это еще не все! У меня есть интерфейс.
Обычный писишный RS232C, так называемый компорт. Но если вы думаете, что это
отдельный чип, мол, сунул ему байт, принял из буфера байт, то вы заблуждаетесь.
Себестоимость. Я все это делаю ручками, телипая единственный бит порта. Ручками
кручу диаграмму стартов, стопов и данных. Итак:
Если я накатал код решающий задание, но он не влезает в память - задача не решена. Если
при этом я создал большее число переменных, и они не помещаются в оперативку - задача
не решена.
Если все Оки-доки, но процедуры слишком длинны, разрушается диаграмма реалтайма -
задача не решена. Если процедур слишком коротки, их много, исчерпывается стек - задача
не решена.
Любой средней руки программер, поставь его в подобные условия, застрелится на второй
день. Вообще, по моему убеждению, парни, работающие в этой области, имеют стальные
нервы и неукротимую волю к победе. Мы редко общаемся с обычными программерами -
нам в общем не чем разговаривать. И не потому, что мы снобы или гордецы. Совсем
необязательно. Нам трудно представить себе программирование под неисчерпаемыми
ресурсами на языках высокого уровня. Мало винта? Купи другой, в чем проблема? Мало
рамы? Купи еще, толкни в слот. Меги кодов? А я причем? Это компилятор виноват.
Купите машину побольше. Это как разные планеты и я надеюсь, вы поняли почему.
Это как красивый белый океанский круизер в бескрайних океанских просторах, плыви
куда хочешь. А вы попробуйте на нем в финских шхерах порулить. ;-) Или вдевать нитку
в иголку среди ночи. Причем, черную нитку.
Конечно, мы тоже имеем наборы кристаллов и выбираем их перед разработкой с большей
дотошностью, чем жених невесту, и гадаем на кофейной гуще и прочих подручных
средствах, а хватит ли? Но, если выбор сделан.. Назад ходу, как правило нет.
Hу что ж. Я ввел вас в предметную область и могу продолжить свой рассказ.




6. Inside  Россия, Москва | Master | 9.10.16 20:35  

надо на Си попрогить
разглядываю DEV-C++ и CodeBlocks
но у обоих есть проблеммы
DEV-C++ - не запускается дебаггинг (кнопка есть, нет остановок и отслеживания переменных)
в Кодеблокс нет кириллицы в терминале
с кем-бы потрещать на тему получения пинков начинающему программисту?
ну типа подшефным стать




5. Sanek  Россия, г.Сертолово Лен.обл. | Master | 12.07.16 6:28  

Количество циклов записи в EEPROM AVR'ов
Какое гарантированное максимальное количество циклов записи в EEPROM AVR'ов?
Не хотелось бы, чтобы возникла ситуация как в Chorus'ах при регулировке громкости.
В даташитах этого параметра не нашел :(




4. Sanek  Россия, г.Сертолово Лен.обл. | Master | 13.07.16 22:58  

Увеличиваем ресурс EEPROM в AVR
В архиве apkservice.ru/files/LCD1602_I2C.rar проект для Atmel Studio 7.
Файлы eep.c и eep.h по сути библиотека, в которой реализован метод циркулярного буфера.
Этот метод описан в аппноуте "AVR-101: High Endurance EEPROM Storage" от Atmel.
www.atmel.com/images/doc2526.pdf
Железо для эксперимента:
STK500, Atmega16, переходник I2C->LCD1602 на базе PCF8574 и дисплей 1602.
Переходник и дисплей приобретены на aliexpress.
После подачи питания начинается отсчет секунд.
Если, например на сотой секунде, выключить питание, а потом включить,
отсчет пойдет не с нуля, а со 100. Метод работает.
Задача, которую я поставил себе, выполнена.




3. Sanek  Россия, г.Сертолово Лен.обл. | Master | 13.05.16 12:42  

*.bat на win 7
Есть две папки Src и Dest, в Src есть файл, который надо скопировать в Dest.
copy.bat находится в Src, в нём пишу:

@echo off
@del H:_Users_Aleksandr_Desktop_Dest_file.dat
copy file.dat H:_Users_Aleksandr_Desktop_Dest_
pause

copy.bat запускаю от имени администратора,
в Dest файл удаляется, а новый не копируется,
пишет мол не удаётся найти указанный файл.
Где моя ошибка?
--------------------------
Т.к. обратный слэш форум удаляет, он заменен на "_".




2. Sanek  Россия, г.Сертолово Лен.обл. | Master | 21.04.16 9:36  

Последовательное выполнение потоков
Есть несколько глобальных переменных, установив которые в true юзер определяет
необходимые ему операции
BOOL bOne = false;
BOOL bTwo = false;
BOOL bThree = false;
Каждая операция выполняется в потоке
DWORD WINAPI ThreadOne(LPVOID lpParam)
{
...
}
DWORD WINAPI ThreadTwo(LPVOID lpParam)
{
...
}
DWORD WINAPI ThreadThree(LPVOID lpParam)
{
...
}
Создаются потоки функцией CreateThread.
HANDLE hOne = CreateThread(NULL, 0, ThreadOne, NULL, 0, &lpThreadId);
...
и т.д.
Вопрос, как лучше отследить завершение потока?
Например, не получается запустить поток ThreadTwo таким способом
if(bTwo && (WaitForSingleObject (hOne, INFINITE) == WAIT_OBJECT_0)
{
//запускаем поток ThreadTwo
}
В каждый момент времени выполняется один поток.




1. Maloy  | Banned | 21.04.16 7:20  

ПЕРВЫЙНАХ
0xFF



Cтраницы: [ 2 1 ] Архив


» Форумы » SourceCode Orange Orange5 Omega CarRadio Car Creative Other xBuy


hosted by www.telemaster.ru | © 2016 CnCLab | Ex.time: 0.0159