|
Портирую TCP/IP стек для STM8L в IAR'e, STM8L+ENC28j60 |
|
|
|
Nov 3 2011, 05:33
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 30-07-08
Пользователь №: 39 306

|
Стала задача прикрутить 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 склиент (отправка данных на сайт)
|
|
|
|
|
 |
Ответов
|
Nov 3 2011, 10:07
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 30-07-08
Пользователь №: 39 306

|
Оказалось проблема в опитимизаторе 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, там все проще, но и хуже, да не нужно было использовать указатели для моих задач. В общем мне есть куда расти.
|
|
|
|
|
Nov 7 2011, 04:53
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 30-07-08
Пользователь №: 39 306

|
Цитата(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
|
|
|
|
|
Nov 7 2011, 06:26
|
Гуру
     
Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136

|
Цитата(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 на высоком уровне оптимизации (то есть в дизассемблере) - задача очень сложная.
|
|
|
|
|
Nov 10 2011, 07:41
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 30-07-08
Пользователь №: 39 306

|
Цитата(KRS @ Nov 7 2011, 23:43)  Ну автор видимо считает компилятор со средой производства одной и той же фирмы.
Одно непонятно зачем к STM32 подключать внешний SPI ethernet еще и 10 мегабит! Да я про то что для STM8 и STM32 есть компиляторы от IAR, я знаю что продукты разные. Да у SMT32 есть и встроенный ethernet, но он без PHY это значит нужно еще одну микруху ставить, довольно не малого таракана, что займет у стм32 много выводов. Ну а 10 мегабит мне вполне хватает, я онлайн видео смотреть на контроллере не буду  , мне данный на сайт отправить да простой веб-сервер сделать, чего как я уже выяснил 10 мегабит вполне хватает. Ну и цена у ENC28j60 нормальная. Но буду рад если вы предложите что-нибудь другое, всегда интересно поглядеть другие варианты/чипы. Мне не нравится что ENC28j60 жирет много и греется сильно. С оптимизацией еще проблему не решил - места пока хватает, как сделаю что все заработает, потому буду с оптимизацией разбираться.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|