Перейти к содержанию
    

FreeRTOS LPC2368 Rowley/uIP перенести на IAR

Есть МСВ2360, и есть свежый порт http://www.freertos.org/portlpc2368uIP.html

Надо будет сделать похожее на своем железе, которое уже через месяц будет готово, пока есть желание поиграться с отладочником и софтом.

Скачал поставил CW проект компилится, посмотрел его структуру. Всегда работал с IARом, хочу перенести код туда.

Вопросы:

- ОСь никогда сам не портировал, хотя пользовался DSP/BIOS как ОСРВ работает хорошо представляю. Начал формировать проект в IARе - такое чувство что делаю что-то не через то место. Как правильно работать с такими большими проектами, какие есть программные средства чтобы управлять проектом с осью?

- к CW подцепил сеггеровский драйвер J-Link, а он отказывается работать. Вообще из CW можно прошить кристалл J-Link'ом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начал формировать проект в IARе - такое чувство что делаю что-то не через то место. Как правильно работать с такими большими проектами, какие есть программные средства чтобы управлять проектом с осью?

Ну отсюда не видать :). Среди FreeRTOS портов есть и IARовские - можете посмотреть в качестве образца. Проект по размерам совсем не большой да и был-бы большой - какие проблемы? На какие волшебные средства 'управления' рассчитываете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На какие волшебные средства 'управления' рассчитываете?

В CW проект разбит на 4 папки демо, ось, стек и системные файлы.

Причем по самим папкам тоже логики нифига никакой в демо кроме самой демки куча файлов из разных папок фриртоса. Даже перетаскивать проект в IAR и то гемор приходится куски по разным папкам собирать логики никакой. Может просто файлы по папкам как-то разложить, отдельно приложение отдельно ось отдельно стек, а потом также и проект разбить. Вообщем хочется чтобы все лежало на своих местах а не кучей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В CW проект разбит на 4 папки демо, ось, стек и системные файлы.

Ну вместо demo - какое-то количество уже Ваших файлов, а остальное оставить как есть, ибо логика там присутствует и дальнейшая структура при сопровождении ядра будет именно такая. Впрочем, если Вы абсолютно уверены, что никакие другие компиляторы и контроллеры Вы использовать не будете, то можно все внутри этих трех упростить.

Причем по самим папкам тоже логики нифига никакой

Простите, логика есть.

http://www.freertos.org/ -> Informations->Fundamentals->Source Organisation

 

в демо кроме самой демки куча файлов из разных папок фриртоса.

Естественно.

Может просто файлы по папкам как-то разложить, отдельно приложение отдельно ось отдельно стек

ОНИ ТАК УЖЕ ЛЕЖАТ.

Изменено пользователем zltigo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вместо demo - какое-то количество уже Ваших файлов

Это ясно, демку оттуда выкинуть и будет папка приложения.

 

Впрочем, если Вы абсолютно уверены, что никакие другие компиляторы и контроллеры Вы использовать не будете, то можно все внутри этих трех упростить.

Компилятор пожалуй нет, IAR пока меня устраивает. Контроллеры возможно и другие но маловероятно что не NXP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел порт под IAR системная часть организована немного по разному.

В IARовских портах в системной папке используется один мизерный стартап cstartup.s79, а вот в порте CW в системной папке файлов полно и функций они выполняют изрядно. Кроме собственно стартапа поддержка таймера, более сложная инициализация стеков, куча функций работы с VIC, ISR IRQ, и самое неудобное что все эти модули подключают кросворковские хидера.

Лишнего там кончено точно полно, исходный порт разбабахивать сразу сильно нехотелось бы, но видимо придется.

 

Пока вопрос такой - полно вот таких описаний сруктур.

 

struct uip_eth_hdr {

struct uip_eth_addr dest;

struct uip_eth_addr src;

u16_t type;

}PACK_STRUCT_END;

 

Компилятор понимает описание

struct

{

поле

поле

...

}

имя структуры

 

Поэтому PACK_STRUCT_END принимает за имя и ругается на их несоответствие

Error[Pe147]: declaration is incompatible with "struct uip_icmpip_hdr __data PACK_STRUCT_END"

Видимо надо не править а включить у компилятора поддержку какого-то расширения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поэтому PACK_STRUCT_END ...

Глянул lwIP мельком - это макрос :) и он должен быть просто определен и проблем не будет.

Но стиль написания, конечно, дурацкий :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Глянул lwIP мельком - это макрос :) и он должен быть просто определен и проблем не будет.

Но стиль написания, конечно, дурацкий :(

Там не lwIP а uIP, но не суть. Макрос разрыл в проекте CW он структуру делает packed. Что-то в IARe мне не удалось его заставить понять исходный код. Перенес имена структур вместо этого PACK_STRUCT_END. Помогает, но такие косяки лезут толпами. Наверное это неправильный путь переделывать из CW порта на IAR, запустить порт малой кровью под ИАРом все равно не получается, а если все ломать - то наверное лучше взять порт на ближайший LPC но ИАРовский, портировать его на 2368, а потом уже туда втыкать стек и все остальное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там не lwIP а uIP, но не суть. Макрос разрыл в проекте CW он структуру делает packed. Что-то в IARe мне не удалось его заставить понять исходный код.

То, что он делает, это понятно, но то, что кто-то попытался извратиться и вместо более-менее общепринятых вариаций на тему #pragma pack использовать более узкоспециализированное это уже плохо. Все дивные макросы дефинировать в "ничего" и использовать или прямые указания

#pragma pack( push, 1 )

#pragma pack( pop )

либо через #include их-же через внешние файлы.

Перенес имена структу...

Я непонял, что Вы сделали, но все очень просто и я описал это выше.

Наверное это неправильный путь переделывать из CW порта на IAR

Почему?????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То, что он делает, это понятно, но то, что кто-то попытался извратиться и вместо более-менее общепринятых вариаций на тему #pragma pack использовать более узкоспециализированное это уже плохо. Все дивные макросы дефинировать в "ничего" и использовать

Так и пробовал - ИАР почему то не понял.

 

или прямые указания

#pragma pack( push, 1 )

#pragma pack( pop )

либо через #include их-же через внешние файлы.

Или я не понял или прямые указания надо все равно вбивать перед определением структуры.

 

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

Просто ломается рабочий код, к тому моменту как он начнет компилиться он перестанет работать. Мне уже кажется что проще пойти с другой стороны взять ЛПСишный ИАРовский порт попроще - и портировать его на 2368, там вроде проще а потом в рабочий код надстраивать стеки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так и пробовал - ИАР почему то не понял.

Он не мог не понять :) значит ошиблись.

Или я не понял или прямые указания надо все равно вбивать перед определением структуры.

Да. Но с тем-же самым, но в #include получается переносимее, ибо в основном файле уже нет специфики компилятора, а в сам include можно напихать распознавание кучи компиляторов и пользоваться им всегда и везде.

Мне уже кажется что проще пойти с другой стороны взять ЛПСишный ИАРовский порт попроще - и портировать его на 2368, там вроде проще а потом в рабочий код надстраивать стеки.

Примерно один черт, единственно, если все впервой и большей частью :( по наитию, то получается, что идти "от рабочего" кода действительно несколько спокойнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он не мог не понять :) значит ошиблись.

Я ставил пустой дефайн в опциях проекта в предопределенные символы, странно если пустой дефайн в хидеренаписать работает, а из опций нет.

 

Да. Но с тем-же самым, но в #include получается переносимее, ибо в основном файле уже нет специфики компилятора, а в сам include можно напихать распознавание кучи компиляторов и пользоваться им всегда и везде.

С инклудом не понял все равно, как можно не меняя хидер uip.h на место PACK_STRUCT_END воткнуть #pragma pack - он же вроде бы как должен быть перед определением структуры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как можно не меняя хидер uip.h на место PACK_STRUCT_END ....

Так, давайте медленно и печально. Первый вопрос где Вы вообще смогли увидеть PACK_STRUCT_END и прочие паковочные макросы в uIP подчеркиваю в uIP а не lwIP стеке.

В lwIP, где они действительно присутствуют для работы c include просто:

#define PACK_STRUCT_USE_INCLUDES
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END

И в два файла (у меня они по жизни называются packon.h и packoff.h а у авторов стека соответственно

bpstruct.h и epstruct.h )

Мои файлы в приложении. Можете их или переименовать, или заинклюдить :) еще раз в авторские имена.

PACK_on_off.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так, давайте медленно и печально. Первый вопрос где Вы вообще смогли увидеть PACK_STRUCT_END и прочие паковочные макросы в uIP подчеркиваю в uIP а не lwIP стеке.

В хидере uip.h, также uip_arp.h там я правил точно :)

Может проблема в том что я смотрю в UIP из комплекта порта фриртоса?

 

В lwIP, где они действительно присутствуют для работы c include просто:

#define PACK_STRUCT_USE_INCLUDES
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END

Тут все ясно, незнаю почему не работало если определения вставлены в опции предефайна проекта, другие дефайны там же вроде проканали.

 

И в два файла (у меня они по жизни называются packon.h и packoff.h а у авторов стека соответственно

bpstruct.h и epstruct.h )

Мои файлы в приложении. Можете их или переименовать, или заинклюдить :) еще раз в авторские имена.

Я понял - предлагается PACK_STRUCT_**** заменить пустыми дефайнами, а директивы #pragma pack распространить инклудом на весь проект. Так?

 

Худо бедно стек скомпилил перешел к другим папкам пытаюсь разобраться дефайнами

portENTER_SWITCHING_ISR();

portEXIT_SWITCHING_ISR(...);

чего-то там тоже неблагополучно ИАР теряет скобки Error[Pe125]: expected a "("

 

 

Сразу еще такой вопрос, в CW порте используется portmacro и portISR из папки GCC, как в ИАРе быть с атрибутами naked и signal? __irq?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В хидере uip.h, также uip_arp.h там я правил точно :)

Может проблема в том что я смотрю в UIP из комплекта порта фриртоса?

А я тогода куда смотрю :)

Я понял - предлагается PACK_STRUCT_**** заменить пустыми дефайнами

Именно так в оригинале и задумано - варьировать ими в зависимости от возможностей компилятора.

, а директивы #pragma pack распространить инклудом на весь проект. Так?

На весь замного будет - только на пакованные структуры правильнее.

Худо бедно стек скомпилил перешел к другим папкам пытаюсь разобраться дефайнами

portENTER_SWITCHING_ISR();

portEXIT_SWITCHING_ISR(...);

А чего с ними разбираться - берете готовые из IAR порта и все.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...