Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Прикладное программирование на С  (Прочитано 21504 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
robat-bender
Гость
« : 31-10-2006 17:59 » 

Добрых суток всем!

 Вот такой вопросец! Я раньше с С не работал и вот изучил, ну всякие там строчки буковки вставить/копировать сортировки и т.д. А вот меня интересует программирование железа на С, реально то что по-жизни нужно: программирование звука, графики, прямая работа с диском и т.д. и т.п. Где можно обо этом узнать, а? Никаких книг в магазинах не нашел (в инете что то пока тоже) вокруг только строчки/буковки и сортировки. Подскажите господа программеры, чего делать.
P.S. Все программирование железа только на ASMe.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 31-10-2006 18:52 » 

robat-bender, во-первых, многое зависит от окружения и прежде всего от ОС. Современные ОС не позволяют обращаться к железу - этим занимаются драйвера.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 31-10-2006 19:48 » 

robat-bender, если под windows, то программирование звука и графики - это DirectX. Если под другие платформы, то - OpenGL и OpenAL. Причем от языка эти API не зависят, ну разве что DirectX - это пожалуй все-таки С++. Это для игр. Для "просто нарисовать кружок на окне" можно использовать GDI и GDI+ (опять же под Windows).

Прямая работа с диском тебе не светит в современных ОС, это, как  RXL справедливо заметил, дело драйверов.

В любом случае надо изучить еще и ту ОС под которой ты хочешь работать.
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
robat-bender
Гость
« Ответ #3 : 31-10-2006 20:09 » 

Но позвольте, господа! А вот если к примеру просто ДОС, чистый, черный ? Ага
И потом, насколько я понимаю в С есть inline asm, т.е. программирование происходит наверное через него, но тогда наверное это уже программинг на асме, да? И,если я правильно вас понял, программинг железяк происходит посредством драйверов, то бишь драйверы - это "дядьки" с которыми можно и нужно договариваться? Тогда что вы посоветуете для чистого ДОСа, может хоть литературу какую то обозначите, а? Или пути покажите какие, как мне перейти от сортировки строк к ковырянию системы, что - нибудь для профов, типа: "написание драйвера ОС MS DOS средствами языка С..." ну или что то в этом роде?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 31-10-2006 20:42 » new

robat-bender, тогда начни с поиска Улыбаюсь
По программированию в MSDOS рекомендую хороший справочник techhelp.

Современное железо стало достаточно сложным и чтобы правильно его использовать нужно много о нем знать. Это не как раньше Create soundblaster16: несколько портов, минимум команд + программирование DMA. Нынче железо стало очень разнообразным.
« Последнее редактирование: 31-10-2006 20:44 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Serg
Гость
« Ответ #5 : 01-11-2006 00:43 » 

если вас так интересует программирование под дос на си то вот неплохая книжка
"C для профессиональных программистов"
Шилдт Г. В сети точно есть.
Но все это настолько древнее, не понятно зачем на это  тратить время
Записан
robat-bender
Гость
« Ответ #6 : 01-11-2006 05:20 » 

если вас так интересует программирование под дос на си то вот неплохая книжка
"C для профессиональных программистов"
Шилдт Г. В сети точно есть.
Но все это настолько древнее, не понятно зачем на это  тратить время


А все просто! Я позиционирую себя как downgrade'r.Ага Отсюда и тяга к программингу под ДОС, и потом крепко разобравшись с ДОСом(а он есть основа) проще будет копвть дальше! Просто у меня всегда был системный подход к изучению чего либо, а торопиться мне некуда! Кстати книга действительно хорошая! спасибо!
« Последнее редактирование: 16-12-2007 14:30 от Алексей1153++ » Записан
robat-bender
Гость
« Ответ #7 : 01-11-2006 05:52 » 

Ну в целом понятно направление! Использовать код С как оболочку а непосредственное программированние железа через АСМ (inline который). Тоесть критические участки кода выписываются на АСМе. Дело в том, что меня интересует программинг именно самопальных железок, вроде упраление двигателем, перемигивание лампочек, получение данных с портом от различных датчиков и т.д. и т.п.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #8 : 01-11-2006 05:58 » 

robat-bender, с тем что дос это основа, могу не согласится, основа как извесно одна начиная с 1970 года(точне несколько раньше) 19700101000001 начало эпохи UNIX Ага

почитай описание от ядра линукс да сам код посмотри, там ты найдёшь и обращения к диску и к USB и 1394 и видео и звук, много много драйверов Улыбаюсь с открытым кодом Улыбаюсь
Записан

Странно всё это....
robat-bender
Гость
« Ответ #9 : 01-11-2006 06:07 » 

robat-bender, с тем что дос это основа, могу не согласится, основа как извесно одна начиная с 1970 года(точне несколько раньше) 19700101000001 начало эпохи UNIX Ага

почитай описание от ядра линукс да сам код посмотри, там ты найдёшь и обращения к диску и к USB и 1394 и видео и звук, много много драйверов Улыбаюсь с открытым кодом Улыбаюсь

Ок! Согласен! Но начинал я именно с пресловутой ДОС и продолжал в Винде, так что поправлюсь, это основа для меня и тех кто работал и работает в том же! UNIX ,бесспорно замечательная система и,кстати, у меня стоит FreeBSd 6.0 и пытаюсь программить и в ней то же, что сделать несколько сложнее, так как давят виндовые стереотипы, но у меня она пока просто как десктоп и сайты я делал имеено в ней, включая написание кода на PHP & PERL. Уважаю UNIXоидов до глубины души, и сам надеюсь им стать когда нибудь! И сахар в кубиках кстати тоже обажаю! Ага
Записан
Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 01-11-2006 08:31 » 

robat-bender, вообще-то сложно назвать ДОС основой для NT-систем. Я бы даже сказал вообще невозможно, совершенно разные принципы.

И еще одно, программировать железо, не обязательно на ассемблере. От языка здесь ничего не зависит. Например, под Windows 2k/XP и дальше драйвера пишутся на С, при этом в них практически никогда не встречается ассемблерных вставок. Причина такой нелюбви к ним - оптимизирующие компиляторы: сделав одну ассемблерную вставку, ты рискуешь разрушить все замыслы компилятора, ясно что код от этого, как минимум, не станет быстрее обычно добавляются лишние пересылки и работа со стеком.
Под QNX драйвера пишутся на С, под Linux тоже. Да что там говорить, даже микроконтроллеры сегодня программируют на С. Современные компиляторы достигли такого уровня, что человеку сложно обогнать их, сделать это можно, только еще подчистив код компилятора, и используя частные случаи.

Вообще, со своей колокольни, я бы советовал программировать под ДОС, только если совсем не терпится посмотреть как лампочки мигают и двигатель ездит Улыбаюсь Но опыт программирования железа под ДОС будет очень сильно мешать при работе в современных ОС. На работе таких горе-ДОС-программистов кучи, это ужасно, когда они под Windows NT программируют также как под ДОС... Так что лучше бы не заниматься этим... Я советую почитать книжку "Внутреннее устройство Microsoft Windows XP" (как вариант 2000 или 2003), или что-нибудь по Linux. Это операционные системы уже совсем другого класса, работать в них гораздо удобнее и безопаснее чем по ДОС, да и сделать можно значительно больше. 
Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 01-11-2006 12:29 » 

Ассемблерные вставки не помогут.  Взаимодействие с железом осуществляется через порты ввода-вывода и/или прерывания.  Доступ к соответствующим областям памяти в Windows начиная с NT прикладным процессам запрещён.  Попытка обратиться к железу, без разницы, на Си или на ассемблере, приведёт к нарушению защиты и, скорее всего, аварийному завершению программы.

Если хочешь мигать лампочками на любимой железке в современной ОС (Windows, Linux, BSD, Solaris - без разницы) - то необходим драйвер.  Вот его и пиши, но не связывайся с ДОС.  В ДОС нет очень многого, что влияет на работу драйвера в современной ОС. Во-первых - многопоточность.  К драйверу могут одновременно обращаться несколько процессов, поэтому надо владеть приёмами многопоточного программирования.  Во-вторых, необходимо знать правила управления памятью внутри ядра, они могут значительно отличаться от управления памятью в приложениях (malloc/new + free/delete).  Есть ещё и в-третьих, и в-четвёртых, и в-десятых и в-двадцатых.
« Последнее редактирование: 01-11-2006 12:36 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
robat-bender
Гость
« Ответ #12 : 01-11-2006 18:34 » 

Во первых всех благодарю! А во вторых я очередной раз убедился, что не зря появился на этом форуме! Я в своем маниакальном :mrgreen:желании программить под ДОС чуть не стал Дон Кихотом! Так что решение принято, перехожу по логике на изучение C++. Это пожалуй то что мне нужно! Да и потом я все больше углубляюсь в *nix! А там и С и С++! а свои железяки я буду подключать тоже в *nix! Все! Решение принято! Спасибо огромное просветили дурня Улыбаюсь Downgrade downgrad'ом, но надо двигаться вперед!
« Последнее редактирование: 16-12-2007 14:30 от Алексей1153++ » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 01-11-2006 20:32 » 

robat-bender, если тебе очень нравится низкоуровневое программирование, то есть две области, где это можно применить: двайвера и микроконтроллеры.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
robat-bender
Гость
« Ответ #14 : 02-11-2006 09:56 » 

У меня вообще то друг роботами занимается, и благодаря вам я получил правильное направление: драйвера и микроконтроллеры! Он уже много железного зверья построил, но оно у него несколько туповатое (всякие тележки с колесиками и усиками/хвостиками) вот и будем значитсо программить. За дровишки я уже взялся, а ишо микроконтроллерную технику надо подучить, а имеено программинг на С AVR'ок. Но железяки - в основном дело друга а с меня софт! Еще раз огромное спасибо всем!
« Последнее редактирование: 16-12-2007 14:33 от Алексей1153++ » Записан
Olegator
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 24-11-2006 13:24 » 

Ассемблерные вставки не помогут.  Взаимодействие с железом осуществляется через порты ввода-вывода и/или прерывания.  Доступ к соответствующим областям памяти в Windows начиная с NT прикладным процессам запрещён.  Попытка обратиться к железу, без разницы, на Си или на ассемблере, приведёт к нарушению защиты и, скорее всего, аварийному завершению программы.
У меня вопрос по поводу Фортрана. Я где-то читал, что Фортран более быстрый за счёт большей низкоуровневости по сравнению с C++ (правда не знаю, как это понимать и правильно ли это). И выходит, что писать на Фортране под Windows NT  не имеет смысла.
Записан
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 24-11-2006 14:42 » 

Сравнение "скорости" выполнения программ похожих по идеологии языков - дохлый номер.  Не так давно сановцы и майкрософтщики мерялись, что быстрее - Java или .Net

Начали в Sun - сравнили вылизанный и заооптимизированный сервис в J2EE и написанный задней левой ногой вебсервис на С#. Понятно, что Java разгромила .Net по всем параметрам.  После чего в Microsoft обиделись и повторили эксперимент, зеркально отразив ситуацию с качеством кода.  В этом случае вебсервис на .Net летал, а в Java еле ползал.

При сравнии C++ и Фортана стоит обратить внимание не на оптимизированность отдельных конструкций языка для упрощения трансляции, а на то, что Си++ позволяет (по крайней мере, в теории) писать более понятные программы.  Не зря ведь родилась шутка что "фортрановскую программу" можно написать на любом языке.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 24-11-2006 15:01 » 

Я бы тоже был по осторожней с параметром "быстрый". Не надо забывать, что фортран заточен под математику, причём ещё в ту пору когда разработчики тряслись из-за каждого лишнего байта и каждой лишней команды. Да и версий его тоже было штук несколько. Не исключено, что они затачивались под возможности конкретных процессоров, или даже систем.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines