Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Портирую TCP/IP стек для STM8L в IAR'e
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > STM8
GRJ
Стала задача прикрутить ENC28J60 к этим новым МК.
Сначала попробовал стек описанный в сообществе (easyelectronics.ru): Удалось связаться с микросхемой, читать/писать регистры, и это все ОК работало. Но вот добиться пинга так и не удалось, поэтому решил забросить и попробовать что нить другое.
Начал портировать стек от такса (http://tuxgraphics.org/electronics/200905/embedded-tcp-ip-stack.shtml)и через 15 минут получил пинг, был очень рад.
Но грабли настигли позже. Решил, чтобы проверить работу сделать простой web - сервер (пример test_OKworks.c). Но проблема в том что там используется GCC компилятор и специфические функции с avr/pgmspace.h которые работаю со флешем.
От суда вопросы:
1. Если я объявлю как const uint8_t *client_urlbuf вместо static prog_char *client_urlbuf; то IAR положит ее во flash? И вместо c = pgm_read_byte(progmem_s++), где const prog_char *progmem_s буду использовать просто с=progmem_s++, где const сhar *progmem_s
2. Или как нужно правильно общаться к flash памяти в STM8L в IAR'e?
3. Может есть у кого заготовка которая передефайнит эти специфические элементы в родные для IAR?

Для замены PSTR и других функций для работы с flash использовал следующую конструкцию
Код:
#define PSTR(s) s
#define pgm_read_byte(ptr) ((char)*(ptr))
#define prog_char char
#define PROGMEM

Но почему то получаю только пинг, побывал запустить test_OKworks.c, но почему то страничку не отображает.
Вот проект в IAR, надеюсь кто нить кто работал с этим стеком и хорошо знает GCC сможет мне что-то подсказать, где может быть ошибка?

P.S. IAR использую недавно, до этого использовал MikroC, но последний, как то глюковатый порой.
Возможно мне лучше портировать какой-нибудь другой стек, подскажите какой ? Задача сделать web сервер, и web склиент (отправка данных на сайт)
scifi
Цитата(GRJ @ Nov 3 2011, 09:33) *
Стала задача прикрутить ENC28J60 к этим новым МК.

Почему именно к этим МК? Обычно для TCP/IP выбирают что-то покруче (больше памяти/скорости). Хотя если в вашем STM8 памяти хватит, то можно.

Цитата(GRJ @ Nov 3 2011, 09:33) *
Но проблема в том что там используется GCC компилятор и специфические функции с avr/pgmspace.h которые работаю со флешем.

Семейство STM8 имеет большое преимущество по сравнению с AVR: в нём однородное адресное пространство. Поэтому никаких извращённых действий для доступа к данным в флэш там делать не нужно: указатели на ROM и RAM одинаковые.

Цитата(GRJ @ Nov 3 2011, 09:33) *
Возможно мне лучше портировать какой-нибудь другой стек, подскажите какой ? Задача сделать web сервер, и web склиент (отправка данных на сайт).

Я бы портировал uIP, так как этот стек позиционируется как маленький. Но для этого нужен опыт. Учитывая то, что вы даже путаетесь в типах указателей, лучше доведите до рабочего состояния текущий вариант.
GRJ
Оказалось проблема в опитимизаторе IAR'a.
Пока не знаю какой именно кусок кода ломается, но поставив Optimization на Low. Web-сервер заработал, теперь буду делать клиент.
Вопрос, можно ли IAR'у сказать что вот такой-то кусок кода не оптимизировать, ну или такую то функцию?

Цитата(scifi @ Nov 3 2011, 12:51) *
Почему именно к этим МК? Обычно для TCP/IP выбирают что-то покруче (больше памяти/скорости). Хотя если в вашем STM8 памяти хватит, то можно.


Семейство STM8 имеет большое преимущество по сравнению с AVR: в нём однородное адресное пространство. Поэтому никаких извращённых действий для доступа к данным в флэш там делать не нужно: указатели на ROM и RAM одинаковые.


Я бы портировал uIP, так как этот стек позиционируется как маленький. Но для этого нужен опыт. Учитывая то, что вы даже путаетесь в типах указателей, лучше доведите до рабочего состояния текущий вариант.


STM8 выбрал потому что потом хочу на STM32 все перенести, а они похоже, причем очень. К тому же для STM у меня есть отладчик, для AVR нету, только программатор, а так как задача не простая, безе отладчика было бы тяжело.

Да я смотрел uIP, но он мне показался намного сложнее, поэтому я оставил его. А на счет того что я путаюсь - Вы правы. Ранее работал в MikroC, там все проще, но и хуже, да не нужно было использовать указатели для моих задач. В общем мне есть куда расти.
scifi
Цитата(GRJ @ Nov 3 2011, 14:07) *
Оказалось проблема в опитимизаторе IAR'a.

Вероятнее всего, на самом деле ошибка в программе, а не в компиляторе. Ошибка компилятора, конечно, не исключена, но маловероятна. Чаще встречается код, который ломается при изменении уровня оптимизации. Это может быть связано с (не)применением volatile, с задержками, реализованными в виде циклов.
С практической точки зрения, конечно, нужно просто понизить уровень оптимизации, если вы ещё не готовы разбираться в чужом коде и искать корень проблемы. Но этот факт нужно взять на заметку.

Цитата(GRJ @ Nov 3 2011, 14:07) *
Вопрос, можно ли IAR'у сказать что вот такой-то кусок кода не оптимизировать, ну или такую то функцию?

Можно. Открывайте руководство (EWstm8_DevelopmentGuide.pdf) и ищите там "pragma optimize". Там всё написано.
KRS
Цитата(GRJ @ Nov 3 2011, 14:07) *
STM8 выбрал потому что потом хочу на STM32 все перенести, а они похоже, причем очень.

Чем похожи??? Первыми 3мя буквами а названии?

GRJ
Цитата(KRS @ Nov 3 2011, 18:34) *
Чем похожи??? Первыми 3мя буквами а названии?

STM32 еще не юзал, но у них один компилятор (а значит портировать нужно будет только SPI) и по заявлению производителя очень похожее firmware, а потому переход должен быть безболезненный (до это с АРМ работал только с LabVIEW, а там все ОСь делала).

Цитата(scifi @ Nov 3 2011, 16:05) *
Вероятнее всего, на самом деле ошибка в программе, а не в компиляторе. Ошибка компилятора, конечно, не исключена, но маловероятна. Чаще встречается код, который ломается при изменении уровня оптимизации. Это может быть связано с (не)применением volatile, с задержками, реализованными в виде циклов.
С практической точки зрения, конечно, нужно просто понизить уровень оптимизации, если вы ещё не готовы разбираться в чужом коде и искать корень проблемы. Но этот факт нужно взять на заметку.


Можно. Открывайте руководство (EWstm8_DevelopmentGuide.pdf) и ищите там "pragma optimize". Там всё написано.

Спасибо за файл, гляну. Да проблема именно в volatile похоже, так как задержки все реализованы через таймер и больше вроде как не где ничему ломаться.
Сейчас с низким уровнем оптимизации весь проект заработал и очень хорошо помещается, но хочется сделать чтобы все было как положено, поэтому теперь буду разбираться какая переменная/функция ломается, и какой нужен volatile
scifi
Цитата(GRJ @ Nov 7 2011, 08:53) *
STM32 еще не юзал, но у них один компилятор

Проверьте свои факты. Процессоры совершенно разные, а значит и компиляторы.

Цитата(GRJ @ Nov 7 2011, 08:53) *
и по заявлению производителя очень похожее firmware, а потому переход должен быть безболезненный

У них похожая периферия. В этом смысле, конечно, есть некоторое облегчение при переходе STM8 <-> STM32.

Цитата(GRJ @ Nov 7 2011, 08:53) *
Спасибо за файл, гляну. Да проблема именно в volatile похоже, так как задержки все реализованы через таймер и больше вроде как не где ничему ломаться.
Сейчас с низким уровнем оптимизации весь проект заработал и очень хорошо помещается, но хочется сделать чтобы все было как положено, поэтому теперь буду разбираться какая переменная/функция ломается, и какой нужен volatile

На volatile свет клином не сошёлся. Могут быть и иные причины. Сначала нужно установить точно, что именно, как и где ломается, а потом исправлять. Причём это может быть совсем непросто. К примеру, у меня не работает TCP (lwip) с определённым компилятором на высоком уровне оптимизации. Я даже не пытаюсь разобраться, так как проследить работу TCP на высоком уровне оптимизации (то есть в дизассемблере) - задача очень сложная.
KRS
Цитата(scifi @ Nov 7 2011, 10:26) *
Проверьте свои факты. Процессоры совершенно разные, а значит и компиляторы.

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

Одно непонятно зачем к STM32 подключать внешний SPI ethernet еще и 10 мегабит!
GRJ
Цитата(KRS @ Nov 7 2011, 23:43) *
Ну автор видимо считает компилятор со средой производства одной и той же фирмы.

Одно непонятно зачем к STM32 подключать внешний SPI ethernet еще и 10 мегабит!

Да я про то что для STM8 и STM32 есть компиляторы от IAR, я знаю что продукты разные.
Да у SMT32 есть и встроенный ethernet, но он без PHY это значит нужно еще одну микруху ставить, довольно не малого таракана, что займет у стм32 много выводов.
Ну а 10 мегабит мне вполне хватает, я онлайн видео смотреть на контроллере не буду sm.gif, мне данный на сайт отправить да простой веб-сервер сделать, чего как я уже выяснил 10 мегабит вполне хватает. Ну и цена у ENC28j60 нормальная.
Но буду рад если вы предложите что-нибудь другое, всегда интересно поглядеть другие варианты/чипы. Мне не нравится что ENC28j60 жирет много и греется сильно.

С оптимизацией еще проблему не решил - места пока хватает, как сделаю что все заработает, потому буду с оптимизацией разбираться.
KRS
Цитата(GRJ @ Nov 10 2011, 11:41) *
Да я про то что для STM8 и STM32 есть компиляторы от IAR, я знаю что продукты разные.

Да IAR практически для всех микроконтроллеров есть!
Но для STM8 он генерит просто ужасный код!

Если хотите сэкономить ноги возьмите микроконтроллер с PHY на борту, например, TI Stellaris LM3S это ARM cortex-M3
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.