|
Новичок на С, Помогите разобраться со структурой проекта |
|
|
|
Feb 7 2006, 21:56
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Доброго времени суток. Помогите начинающему. Долгое время писал на асме для разных микропроцессоров. В том числе большие проекты. На IBM приходилось писать вспомогательные програмки на Delfi. "C" использовать не приходилось. В данный момент приходится осваивать для реализации крупного и длительного проекта. "С" так, как есть вариант впоследствии перейти на др. МП. Почитал, - синтаксис языка вполне понятен. Хоть сейчас в бой. Но нек. моменты не понятны. Во-первых, не хочу обидеть чьи-нибудь чувства, но более дебильной и запутанной IDE среды чем IAR Wb я не встречал. Но к этому привыкну. Скачал PDFы и сделал книжечки. По возможности изучил. Сделал маленькую прогу, но всё равно остался ряд вопросов по организации проги. 1) Как определять какие библиотеки включать? 2) Если необходимы прерывания достаточно ли такого объявления или необходимо что-то ещё (например переходы): #pragma vector=USART_RXC_vect __interrupt void rxint(void) { } 3) Как понимать следующие строки? (В смысле на языке высокого уровня) jmp_buf main_task; jmp_buf iprx_task; jmp_buf iptx_task; char iprx_rstack[8]; и вот эти пжлст #pragma vector=USART_RXC_vect __interrupt void rxint(void) { if (!setjmp(main_task)) //Запомнили контекст осн. задачи { longjmp(iprx_task,1); //Перешли в контекст IPrecive } } 4) Что необходимо описывать чтобы грамотно сделать проект в котором несколько файлов ".С" 5) При использовании кольцевого буфера правильнее открыть буфер в виде массива или использовать указатели. 6) Профи, если можно вышлите какой-нибудь файл(ы) исходников (можно не рабочих, урезанных или с ошибками) по которым я мог бы посмотреть структуру программы. Лучше с прерываниями. Обязуюсь не распространять и использовать в качестве учебных. Пожалуйста не присылайте слишком больших, а то я зароюсь.  Заранее благодарен. e-mail: sasa@c32dvina.com
|
|
|
|
|
 |
Ответов
|
Mar 11 2006, 23:51
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(SasaVitebsk @ Mar 11 2006, 19:24)  И всётаки вопрос: Если применяешь с компиллер, то оптимизация описанным путём, - это же явная привязка к конкретному компилятору. И даже, вероятней всего, к его конкретной версии.  вопроса-то вроде и нет, Вы сами все верно сказали.  Еще дополню относительно третьего вопроса.. Цитата Третий. Насколько сложно программу написанную на IAR "заставить" компилится на GCC. Может у кого есть спец. ".h" файлы. Зависит от привязки к компилятору. Чем больше текста написано на plain C, без использования прагм, ключевых слов характерных для конкретного компилятора, тем проще будет "заставить" код компилироваться другим компилятором. Хотя с ключевыми словами просто - можно создать хедер с соответствеющими макросами и все (пример osnwt).. А прагм не так уж много.. ;> Существенное отличие между IAR и GCC на мой взгляд заключается наверное в том, что GCC основан на стандарте C99 и позволяет определять переменные только в начале функций, т.о. выражения вида for(int i; i=0;....}, прекрасно воспринимаемые компилятором IAR, в gcc компилироваться не будут. Соответственно лучше сразу ими не пользоваться и в IAR... Цитата Мне для впихивания навороченного USB крипто-загрузчика в 4 килобайта бут-блока меги32 пришлось соптимизировать примерно 200 лишних байтов. Ясное дело, что не только таким способом - многое пришлось переписать по другому. Но результат был достигнут. Я бы "навороченный" криптозагрузчик писал бы полностью на ассемблере, если бы мне потребовался действительно небольшой объем. А так (с упованием на оптимизацию компилятора C) могу только сказать "овчинка выделки не стоит". Появится новая версия компилятора и код, вполне возможно, уже не втиснется в 4k.
Сообщение отредактировал defunct - Mar 11 2006, 23:58
|
|
|
|
|
Mar 12 2006, 01:38
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(defunct @ Mar 12 2006, 01:51)  Я бы "навороченный" криптозагрузчик писал бы полностью на ассемблере, если бы мне потребовался действительно небольшой объем. А так (с упованием на оптимизацию компилятора C) могу только сказать "овчинка выделки не стоит". Появится новая версия компилятора и код, вполне возможно, уже не втиснется в 4k. Дело в том, что 2 килобайта - это USB драйвер, еще килобайт - это дешифровщик. Тем самым мы уже вылезли за пределы 2Кбайт. Остальное - это протокольная часть со всякими штуками. Естественно, что можно все написать на асме, если писать с нуля. Но переписывать 3/4 кода просто из спортивного интереса я не могу себе позволить, поскольку это не моя работа, а всего лишь хобби. Я предпочту уделить это время написанию собственно того, что можно загружать этим загрузчиком, к примеру. Кроме того, бут - это такая штука, которая едва ли будет часто меняться или развиваться. Обычно базовых функций хватает. Скорее, снимут с производства AVR в пользу чего-то другого, чем потребуется что-то менять. Новый компилятор едва ли будет давать бОльший код, чем старый. При этом нормальная практика в серьезных проектах - хранить средства разработки под версионным контролем наряду с собственно разработкой. Так что всегда есть возможность откомпилироваться старым. Иными словами, все определяется потребностями и возможностями. В рамках имеющихся потребностей мне хватило имеющихся возможностей реализовать желаемое с минимальными затратами времени (а переписывание загрузчика или USB драйвера займет на порядок-два больше усилий на отладку и поиск трудноуловимых глюков при малейшей ошибке). В другой ситуации будет лучше все писать с нуля и на асме, но не в этой. Естественно, это всё IMHO.
|
|
|
|
|
Mar 12 2006, 01:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(osnwt @ Mar 12 2006, 03:38)  Кроме того, бут - это такая штука, которая едва ли будет часто меняться или развиваться. Обычно базовых функций хватает. Скорее, снимут с производства AVR в пользу чего-то другого, чем потребуется что-то менять. Новый компилятор едва ли будет давать бОльший код, чем старый. При этом нормальная практика в серьезных проектах - хранить средства разработки под версионным контролем наряду с собственно разработкой. Так что всегда есть возможность откомпилироваться старым. Вот именно, и это как раз тот случай когда применение ассемблера действительно оправдано! Цитата(osnwt @ Mar 12 2006, 03:38)  Дело в том, что 2 килобайта - это USB драйвер .... В другой ситуации будет лучше все писать с нуля и на асме, но не в этой. Естественно, это всё IMHO. Возможно, а возможно было бы целесообразно применить код Igor Cesko о котором Вы упоминали...
|
|
|
|
|
Mar 12 2006, 14:23
|

Частый гость
 
Группа: Свой
Сообщений: 175
Регистрация: 26-01-06
Из: Sevastopol
Пользователь №: 13 664

|
Цитата(defunct @ Mar 12 2006, 03:53)  Цитата(osnwt @ Mar 12 2006, 03:38)  Кроме того, бут - это такая штука, которая едва ли будет часто меняться или развиваться.
Вот именно, и это как раз тот случай когда применение ассемблера действительно оправдано! Если бы у меня стояла задача минимизировать цену в большой партии устройств, то я бы, возможно, и попытался. Однако, код USB занимает больше 1.5 килобайт. Втиснуть в оставшееся дешифровальщик и протокольную часть было бы проблематично, хотя шанс и есть. Но в моей ситуации это была бы неоправданная трата времени. Цитата Цитата(osnwt @ Mar 12 2006, 03:38)  Дело в том, что 2 килобайта - это USB драйвер .... В другой ситуации будет лучше все писать с нуля и на асме, но не в этой. Естественно, это всё IMHO.
Возможно, а возможно было бы целесообразно применить код Igor Cesko о котором Вы упоминали... Цитата с сайта автора avr-usb (выделено мною): Цитата Advantages over other Firmware-Only Implementations
A similar driver for the AVR series of microcontrollers is available from Igor Češko. Our USB driver has the following advantages over Igor's driver:
* All customizable code written in ANSI-C and thus easier to maintain. * Modular concept: easier to integrate into existing designs. * Slightly smaller code size in spite of high level language modules. * Faster: All encoding/decoding (USB requires NRZI coding and bit stuffing) is done in real-time, not in the main loop after storing away the raw data stream. * AVR-USB comes with a free shared Vendor- / Product-ID pair. * The level of standards conformance is documented (description of limitations and potential problems). * Available for free with Open Source license. (See the file License.txt in the distribution.) И, что интересно, что это правда - ассемблерный вариант занимал больший объем, не столь стабилен и совершенно недокументирован. А в этом варианте вчера была вычищена одна логическая бага, которая мешала при очень интенсивном обмене данными с хостом при наличии других устройств на том же контроллере. И теперь проблем я пока не вижу. Цитата(beer_warrior @ Mar 12 2006, 13:23)  Вообще-то достаточно странно.Ведь по идее компилеру должно быть наплевать задан сегмент кода программно или аппаратно. Не вижу ничего странного. При различных методах адресации кода и данных нужно помнить разные типы указателей или использовать нечто вроде generic типа указателя в IAR, который крайне неэффективен. Доступ к данным тоже осуществляется совершенно по разному. Вроде, мелочь - но, видимо, существенная.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Новичок на С Feb 7 2006, 21:56 Pat Цитата(SasaVitebsk @ Feb 7 2006, 23:56) 2... Feb 7 2006, 22:48 defunct Цитата(SasaVitebsk @ Feb 7 2006, 23:56) 1... Feb 7 2006, 23:04 SasaVitebsk Спасибо всем за ответы и присланные примеры. Ещё б... Feb 8 2006, 01:40 defunct Цитата(SasaVitebsk @ Feb 8 2006, 03:40) 1... Feb 8 2006, 02:50  dxp Цитата(defunct @ Feb 8 2006, 08:50) Компи... Feb 8 2006, 07:07 Pyku_He_oTTyda ЦитатаСкачал PDFы и сделал книжечки
Не поделитесь,... Feb 8 2006, 05:29 Эрик SasaVitebsk!
Я тоже начал осваивать IAR Embed... Feb 8 2006, 10:02 _artem_ По пункту 3 :
Предполагаю что setjmp запоминает ре... Feb 8 2006, 12:47 Rst7 Цитата(_artem_ @ Feb 8 2006, 14:47) По пу... Feb 8 2006, 13:17 defunct Цитата(Rst7 @ Feb 8 2006, 15:17) Гм, да м... Feb 8 2006, 22:45 dxp Цитата(defunct @ Feb 9 2006, 04:45) Вопро... Feb 9 2006, 06:10 Rst7 Цитата(defunct @ Feb 9 2006, 00:45) Тогда... Feb 9 2006, 08:22  defunct Цитата(Rst7 @ Feb 9 2006, 10:22) Теперь п... Feb 9 2006, 11:55   Rst7 Цитата(defunct @ Feb 9 2006, 13:55) Хорош... Feb 9 2006, 12:56    defunct Цитата(Rst7 @ Feb 9 2006, 14:56) Можно, о... Feb 9 2006, 13:42 SasaVitebsk Ещё раз спасибо всем ответившим.
Перевариваю.
... Feb 9 2006, 11:56 SasaVitebsk По ходу написания возникло ещё несколько вопросов,... Feb 14 2006, 00:12 vet 1) Не рекомендуется использовать динамическое выде... Feb 14 2006, 06:28 IgorKossak SasaVitebsk, если Вы склоняетесь к п. 1).б), то Ва... Feb 14 2006, 07:30 SasaVitebsk Цитата(vet @ Feb 14 2006, 10:28) 1) Не ре... Feb 14 2006, 19:40 IgorKossak Цитата(SasaVitebsk @ Feb 14 2006, 21:40) ... Feb 16 2006, 09:30 SasaVitebsk Спасибо, попробую разные варианты и доложу как пол... Feb 16 2006, 17:30 SasaVitebsk 1) Насколько я понял запись типа " *str++ ... Feb 20 2006, 22:39 dxp Цитата(SasaVitebsk @ Feb 21 2006, 04:39) ... Feb 21 2006, 11:36 IgorKossak Цитата(SasaVitebsk @ Feb 21 2006, 00:39) ... Feb 21 2006, 17:14 SasaVitebsk Цитата(dxp @ Feb 21 2006, 15:36) Вопрос н... Feb 21 2006, 17:16 dxp Цитата(SasaVitebsk @ Feb 21 2006, 23:16) ... Feb 22 2006, 08:13 SasaVitebsk DXP ты всё правильно понимаешь, но я писал на ASMе... Mar 1 2006, 11:07 dxp Цитата(SasaVitebsk @ Mar 1 2006, 17:07) Т... Mar 1 2006, 14:04  defunct Цитата(dxp @ Mar 1 2006, 16:04) Во-первых... Mar 1 2006, 18:26   IgorKossak Цитата(defunct @ Mar 1 2006, 20:26) Цитат... Mar 1 2006, 18:33    dxp Цитата(IgorKossak @ Mar 2 2006, 00:33) Ци... Mar 3 2006, 05:30  SasaVitebsk Цитата(dxp @ Mar 1 2006, 18:04) Во-первых... Mar 2 2006, 18:13   Balaganov Цитата(SasaVitebsk @ Mar 2 2006, 20:13) v... Mar 2 2006, 20:48   dxp Цитата(SasaVitebsk @ Mar 3 2006, 00:13) b... Mar 3 2006, 05:43 vet Нет, идентификатор массива сам является указателем... Mar 1 2006, 11:24 vet ЦитатаВо вторых если я хотел сделать массив указат... Mar 2 2006, 18:19 SasaVitebsk отсутствует ...\avr\bin\nwtdavr.dll... Mar 3 2006, 09:53 dxp Цитата(SasaVitebsk @ Mar 3 2006, 15:53) о... Mar 3 2006, 10:57 appsoft Сообщение об отсутствии nwtdavr.dll наблюдал в рез... Mar 3 2006, 11:10 SasaVitebsk Цитата(SasaVitebsk @ Feb 14 2006, 23:40) ... Mar 5 2006, 16:22 beer_warrior KomG->Pict это уже сам по себе указатель т.е. з... Mar 5 2006, 17:28 SasaVitebsk Пользуюсь книгой Шилдт"Полный справочник по С... Mar 5 2006, 21:23 vet Так и нужно. Можно без скобок. Mar 5 2006, 21:49 SasaVitebsk "vet" твой ответ добавил мне уверенности... Mar 5 2006, 22:20 defunct Цитата(SasaVitebsk @ Mar 6 2006, 00:20) И... Mar 6 2006, 00:36 SasaVitebsk Чувствую, что я скоро всем надоем, и отвечать мне ... Mar 7 2006, 01:26 defunct Цитата(SasaVitebsk @ Mar 7 2006, 03:26) М... Mar 7 2006, 02:18 dxp Цитата(SasaVitebsk @ Mar 7 2006, 07:26) Е... Mar 7 2006, 04:51 osnwt Цитата(SasaVitebsk @ Mar 7 2006, 03:26) И... Mar 7 2006, 20:56  defunct Цитата(osnwt @ Mar 7 2006, 22:56) Код ret... Mar 7 2006, 22:22   osnwt Цитата(defunct @ Mar 8 2006, 00:22) Цитат... Mar 7 2006, 22:41    osnwt ЦитатаЯ вот тут подумал, чем надеяться на оптимиза... Mar 8 2006, 11:27     defunct Цитата(osnwt @ Mar 8 2006, 13:27) Увы, не... Mar 8 2006, 12:31      osnwt Цитата(defunct @ Mar 8 2006, 14:31) После... Mar 8 2006, 13:59 SasaVitebsk Беседа была интересная. И я планирую проверить н... Mar 11 2006, 17:24 osnwt Если вопросы ко мне - попробую ответить.
Цитата(S... Mar 11 2006, 19:47 beer_warrior ЦитатаТретий. Насколько сложно программу написанну... Mar 11 2006, 21:51 osnwt Цитата(beer_warrior @ Mar 11 2006, 23:51)... Mar 11 2006, 22:05 beer_warrior 2 osnwt
ЦитатаКак пояснил Кристиан, gcc не рассчит... Mar 12 2006, 11:23 SasaVitebsk Похоже даже максимального уровня оптимизации мне б... Mar 16 2006, 21:19 vet Цитата(SasaVitebsk @ Mar 17 2006, 00:19) ... Mar 16 2006, 22:21 osnwt Цитата(SasaVitebsk @ Mar 16 2006, 23:19) ... Mar 17 2006, 10:53 beer_warrior Цитатапочему компилятор так упорно применяет коман... Mar 16 2006, 21:55 alekseykoj У IAR синтаксис обычный для языка С. Т.е описание ... Mar 17 2006, 14:19 osnwt Цитата(alekseykoj @ Mar 17 2006, 16:19) У... Mar 17 2006, 14:41 SasaVitebsk Я извиняюсь перед всеми. Надо было более детально ... Mar 17 2006, 17:59 Old1 Цитата(SasaVitebsk @ Mar 17 2006, 21:59) ... Mar 17 2006, 18:53  osnwt Цитата(Old1 @ Mar 17 2006, 20:53) Компиля... Mar 17 2006, 19:52 SasaVitebsk Цитата(Old1 @ Mar 17 2006, 22:53) Компиля... Mar 17 2006, 19:38 SasaVitebsk osnwt спасибо за расширенный ответ. Детали и нюанс... Mar 19 2006, 13:05 osnwt Цитата(SasaVitebsk @ Mar 19 2006, 15:05) ... Mar 19 2006, 14:32  osnwt Цитата(osnwt @ Mar 19 2006, 16:32) *p++ (... Mar 19 2006, 18:38 defunct Как говорит уважаемый АП - лучше написать два раза... Mar 19 2006, 16:50 SasaVitebsk Я это обнаружил с самого начала, но решил посмотре... Mar 19 2006, 20:27 osnwt Цитата(SasaVitebsk @ Mar 19 2006, 22:27) ... Mar 19 2006, 23:04 SasaVitebsk Спасибо всем помогавшим. Сегодня в общих чертах пр... Mar 20 2006, 18:19 SasaVitebsk Подскажите спецы (IAR). Компилятор очищает перемен... Mar 22 2006, 10:48 SasaVitebsk Подскажите спецы (IAR). Компилятор очищает перемен... Mar 22 2006, 11:03 defunct __no_init ? Mar 22 2006, 11:17 SasaVitebsk Спасибо.
Сегодня ине глючит у меня. Поэтому топик ... Mar 22 2006, 12:29 defunct Цитата(SasaVitebsk @ Mar 22 2006, 14:29) ... Mar 22 2006, 13:09 SasaVitebsk Всё ещё сложнее чем Вы думаете. И вто же время д... Mar 22 2006, 20:42 defunct 1. избавляться от "дыр" в массиве можно ... Mar 22 2006, 21:37 SasaVitebsk В массиве только указатели на "команды".... Mar 23 2006, 21:39 defunct Цитата(SasaVitebsk @ Mar 23 2006, 23:39) ... Mar 23 2006, 23:30 SasaVitebsk Нашёл функцию "memcpy" скорее всего это ... Mar 24 2006, 14:42 osnwt Цитата(SasaVitebsk @ Mar 24 2006, 16:42) ... Mar 25 2006, 07:08 defunct /offtop
ЦитатаА всётаки что на счёт программы. Та... Mar 24 2006, 15:42 SasaVitebsk Цитата(defunct @ Mar 24 2006, 19:42) Как ... Mar 25 2006, 16:01 SasaVitebsk А вот вопрос для понимания. Почему компилятор сохр... Mar 27 2006, 10:07 beer_warrior Правильный ответ 2.
Индексной адресацией удобно бе... Mar 27 2006, 11:23 SasaVitebsk Такой вот вопрос:
При входе в подпрограмму передаю... Apr 2 2006, 09:42
10 чел. читают эту тему (гостей: 10, скрытых пользователей: 0)
Пользователей: 0
|
|
|