реклама на сайте
подробности

 
 
> Новичок на С, Помогите разобраться со структурой проекта
SasaVitebsk
сообщение Feb 7 2006, 21:56
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 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) Профи, если можно вышлите какой-нибудь файл(ы) исходников (можно не рабочих, урезанных или с ошибками) по которым я мог бы посмотреть структуру программы. Лучше с прерываниями. Обязуюсь не распространять и использовать в качестве учебных. Пожалуйста не присылайте слишком больших, а то я зароюсь. smile.gif

Заранее благодарен. e-mail: sasa@c32dvina.com
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Mar 11 2006, 17:24
Сообщение #2


Гуру
******

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



Беседа была интересная. smile.gif И я планирую проверить некоторые вещи в плане генерации.
Пока я ещё не завершил написание проекта. Обычно я сначала пишу всё, и только потом вылизываю.
И всётаки вопрос: Если применяешь с компиллер, то оптимизация описанным путём, - это же явная привязка к конкретному компилятору. И даже, вероятней всего, к его конкретной версии. smile.gif

Второй вопрос. Зачем, конкретно Вы, используете два разных компилятора. Хотя бы коротко. smile.gif
Третий. Насколько сложно программу написанную на IAR "заставить" компилится на GCC. Может у кого есть спец. ".h" файлы.
Go to the top of the page
 
+Quote Post
osnwt
сообщение Mar 11 2006, 19:47
Сообщение #3


Частый гость
**

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



Если вопросы ко мне - попробую ответить.

Цитата(SasaVitebsk @ Mar 11 2006, 19:24) *
Если применяешь с компиллер, то оптимизация описанным путём, - это же явная привязка к конкретному компилятору. И даже, вероятней всего, к его конкретной версии. smile.gif

Верно, хотя это не привязка, так как таким образом оптимизированный код скомпилируется правильно и другим компилятором. Может, не столь же эффективно - но правильно. С другой стороны, то, что пишется под AVR, едва ли будет компилироваться десятками разных компиляторов под десятком платформ. С вероятностью процентов 95% этот код вообще не выйдет за пределы компьютера автора (авторов). Потому при сохранении общей наглядности кода на C такая оптимизация имеет право на жизнь, когда есть проблемы по быстродействию или объему. Мне для впихивания навороченного USB крипто-загрузчика в 4 килобайта бут-блока меги32 пришлось соптимизировать примерно 200 лишних байтов. Ясное дело, что не только таким способом - многое пришлось переписать по другому. Но результат был достигнут.

Причем, переписать неочевидным путем. Скажем, алгоритм дешифровки использует сравнение 4-х байтов, загружаемых через последовательные *p++ и сравниваемые с 4-мя байтами сигнатуры побайтно. Казалось бы - самое оптимальное, раз байты так извлекаются. НЕТ. Более оптимально оказалось сделать так (непортабельно из за выравнивания на других платформах, но это и не нужно): v = *(unsigned long *)p; p += 4; а потом сравнить v с unsigned long сигнатурой. Это дало приличную экономию, учитывая, что сигнатура в данном случае - константа.

Цитата
Второй вопрос. Зачем, конкретно Вы, используете два разных компилятора. Хотя бы коротко. smile.gif

Лично я не использую, я использую IAR. Однако, версия USB драйвера для AVR написана под GCC компилятор и ассемблер, и под них оптимизирована автором. Потому мне пришлось сравнить эти два компилятора, чтобы портировать все на IAR. Это оказалось весьма несложно - C код вообще не менялся, практически. Ассемблерный - тоже. Были символические нюансы по особенностям типа "PROGMEM меняется на __flash", и т.п. А также соглашения по вызову ассемблерных функций из C и оформлению процедур обработки прерываний.

И вот при всём этом при максимальных оптимизациях C-часть драйвера компилируется под IAR примерно в 750 байтов, а под GCC - 550. 200 байтов проигрывает IAR. Однако, алгоритм дешифровки, никак не оптимизированный, скомпилированный под IAR получился около 1000 байтов, а под GCC - 1400. Вот мы уже впереди.

Так что особенности того компилятора, под который пишем, знать всё же полезно. Однако, в худшем случае переносимый код скомпилируется и другим компилятором. А вот всякие ассемблерные вставки с разным их синтаксисом и особенностями распределения регистров уже совсем непереносимы. Для USB драйвера пришлось переписать пару процедур, вызываемых из C, именно из за другого соглашения по регистрам.

Цитата
Третий. Насколько сложно программу написанную на IAR "заставить" компилится на GCC. Может у кого есть спец. ".h" файлы.

Если программа написана "правильно", то очень просто. Особенности относятся, как правило, к расширениям языка для поддержки FLASH, SFR, и т.п. Для примера приведу файл iarcompat.h из неопубликованной пока версии USB драйвера, который включается сишной и ассемблерной частями вместо "avr/*.h" файлов, используемых GCC. Остальные изменения не сильно принципиальны. Главное - это по всем спорным вопросам расширений писать макро, которые можно потом просто переопределить.

Код
/* Name: iarcompat.h
* Project: AVR USB driver
* Author: Christian Starkjohann
* Creation Date: 2006-03-01
* Tabsize: 4
* Copyright: (c) 2006 by OBJECTIVE DEVELOPMENT Software GmbH
* License: Proprietary, free under certain conditions. See Documentation.
* This Revision: $Id$
*/

/*
General Description:
This header is included when we compile with the IAR C-compiler and assembler.
It defines macros for cross compatibility between gcc and IAR-cc.

Thanks to Oleg Semyonov for his help with the IAR tools port!
*/

#ifndef __iarcompat_h_INCLUDED__
#define __iarcompat_h_INCLUDED__

#if defined __IAR_SYSTEMS_ICC__ || defined __IAR_SYSTEMS_ASM__

/* Enable bit definitions */
#ifndef ENABLE_BIT_DEFINITIONS
#   define ENABLE_BIT_DEFINITIONS    1
#endif

/* Include IAR headers */
#include <ioavr.h>
#ifndef __IAR_SYSTEMS_ASM__
#   include <inavr.h>
#endif

#define __attribute__(arg)
#define IAR_SECTION(section)    @ section

#ifndef USB_BUFFER_SECTION
#   define  USB_BUFFER_SECTION  "TINY_Z"    /* if user has not selected a named section */
#endif

#ifdef __IAR_SYSTEMS_ASM__
#   define __ASSEMBLER__
#endif

#ifdef __HAS_ELPM__
#   define PROGMEM __farflash
#else
#   define PROGMEM __flash
#endif

#define PRG_RDB(addr)   (*(PROGMEM char *)(addr))

/* The following definitions are not needed by the driver, but may be of some
* help if you port a gcc based project to IAR.
*/
#define cli()       __disable_interrupt()
#define sei()       __enable_interrupt()
#define wdt_reset() __watchdog_reset()


#endif  /* defined __IAR_SYSTEMS_ICC__ || defined __IAR_SYSTEMS_ASM__ */
#endif  /* __iarcompat_h_INCLUDED__ */
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - beer_warrior   ЦитатаТретий. Насколько сложно программу написанну...   Mar 11 2006, 21:51
|- - osnwt   Цитата(beer_warrior @ Mar 11 2006, 23:51)...   Mar 11 2006, 22:05
- - defunct   Цитата(SasaVitebsk @ Mar 11 2006, 19:24) ...   Mar 11 2006, 23:51
|- - osnwt   Цитата(defunct @ Mar 12 2006, 01:51) Я бы...   Mar 12 2006, 01:38
|- - defunct   Цитата(osnwt @ Mar 12 2006, 03:38) Кроме ...   Mar 12 2006, 01:53
|- - osnwt   Цитата(defunct @ Mar 12 2006, 03:53) Цита...   Mar 12 2006, 14:23
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01505 секунд с 7
ELECTRONIX ©2004-2016