Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F107 и RTL8201 под Keil 5.11
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
smk
Вопрос такой. На Keil 4.72 работает все как надо. Железо рабочее. Пытаюсь сделать новый проект под 5-м кейлом. Там на выбор дают два драйвера. Я выбрал ST802RT1 и хочу его переработать для совместимости с RTL8201CP. Сменил ID и адрес. Переделал проверку ID чтоб проходила с нужной физикой. Всеравно не пингуется. Может кто уже проходил через подобное и подскажете где еще что искать? А физику читает правильно и линк есть. Дальше куда? Собственно вопрос в том, что через неделю подымать проект на работе но уже с F407. Нужен драйвер. Прошу помочь. Спасибо.
А какой кварц нужен? Кейл предлагает 12, а в файлах проекта упоминается 25. Какой нужен?
smk
С драйвером разобрался более-менее. Но появилась неожиданно другая проблема. Сразу после включения коннектится и пингуется. Все нормально. Если я пробую зайти на веб-страничку, то успевает отобразить только маленький текст, а на картинке стопорится. Коннект пропадает и не пингуется. Повторно не коннектится. Что я упуситил? Может что-то в конфигурационных опциях? RTX_Conf_CM.c содержит клеточку, в которой указано 12МГц и 1000 мкС. Уменя кварц 25 МГц. В RTE_Device.h с виду правильно указано 25 МГц и т.п. Однако в свойствах проекта кварц 12 МГц. Помогите разобраться с частотами, где правильно где нет. Может и проблема по симптомам кому знакома. Спасибо.
Golikov A.
Проверьте реальную частоту в итоге. После того как все клоки настроили. считайте значения регистров и посчитайте реально полученную частоту. Если правильно, то и пофиг что в какой клеточке стояло.

А про коннект - там нет конфликта с фул-халф дуплекс? параметры сети правильно физикой определились? Надо регистры почитать и поглядеть, все она правильно понимает?

И еще вот что, в кейловском стеке все ошибки с выделением памяти стеку и посылкам и прочее заведены в одну функцию в конце которой стоит while (1). То есть если у вас по какой то причине не выделиться буфер данных для отправки картинки (предполагаб что она больше текста, потому на ней и затык), то вы влетите в эту функцию и проц повиснет в ней намертво. При этом если из нее выйти он бы продолжил пинговаться и так далее... Поглядите куда вы летите в случае ошибок с выделением pbufов
Integro
Согласен, 50/50 %, прошива вылитает либо в assert либо hard fault, что бы точнее сказать тут нужно отлачиком смотреть)
smk
Клоки посчитаю, где подвисает посмотрю и отпишусь. В отношении физики я смотрел ее регисты и сопоставлял с проектом на Keil 4.72. Все полностью совпало и тот проект работает как часы. Вот новый проект на 5-м кейле чудит пока.
Integro
Цитата(smk @ Feb 2 2015, 11:27) *
Клоки посчитаю, где подвисает посмотрю и отпишусь. В отношении физики я смотрел ее регисты и сопоставлял с проектом на Keil 4.72. Все полностью совпало и тот проект работает как часы. Вот новый проект на 5-м кейле чудит пока.

Если код тот же, можно проверить размер кучи и стека в startup.s
smk
Посмотрел где стопорится.
/* Stack overflow detected for the currently running task. */
/* Thread can be identified by calling svcThreadGetId(). */
Получастся переполнен стек. Подскажите где поправить? Я так пноимаю это касается настроек ОС. И что на что менять?

Код
/*--------------------------- os_error --------------------------------------*/

/* OS Error Codes */
#define OS_ERROR_STACK_OVF      1
#define OS_ERROR_FIFO_OVF       2
#define OS_ERROR_MBX_OVF        3

extern osThreadId svcThreadGetId (void);

void os_error (uint32_t error_code) {
  /* This function is called when a runtime error is detected.  */
  /* Parameter 'error_code' holds the runtime error code.       */

  /* HERE: include optional code to be executed on runtime error. */
  switch (error_code) {
    case OS_ERROR_STACK_OVF: //подвисает тут!!!
      /* Stack overflow detected for the currently running task. */
      /* Thread can be identified by calling svcThreadGetId().   */
      break;
    case OS_ERROR_FIFO_OVF:
      /* ISR FIFO Queue buffer overflow detected. */
      break;
    case OS_ERROR_MBX_OVF:
      /* Mailbox overflow detected. */
      break;
  }
  for (;;);
}


Полагаю это там?
Нажмите для просмотра прикрепленного файла
vlad_new
стек увеличивай. с 200 байтами работать не будет. хотя бы 2 кило отведиди.
smk
Цитата(vlad_new @ Feb 7 2015, 01:50) *
стек увеличивай. с 200 байтами работать не будет. хотя бы 2 кило отведиди.

В выделенном поле установил 2048 байт. Заработало, Спасибо. Хочу спросить как по опыту обычно поступают и где какие значения в той табличке желательно использовать?
smk
Добавил в проект файлы с расширением cgi. Проект отказался собираться. Как в 5-м кейле єто правильно делается?
дошло. префиксы в строчки прописал
smk
При подключении к проекту файла .cgi перестает собираться веб-сайт. Пишет что FCARM не может найти Web.c хотя он есть. Если выкинуть cgi то все нормально. Как всне это правильно в 5-м кейле делается. Хелп читаю но не вполне понятно. Как бы правильно все делаю и не выходит. Подскажите идею как оно на самом деле. Спасибо.
smk
Пока ждал помощи разобрался. Теперь такая проблема. Как вытянуть и поменять локальный айпи?
На вот такое ругается про имя типа не допускается.
Код
//    MyIP[0] = LOCALM.IpAdr[0];
//    MyIP[1] = LOCALM.IpAdr[1];
//    MyIP[2] = LOCALM.IpAdr[2];
//    MyIP[3] = LOCALM.IpAdr[3];
smk
Код
/// Local Machine info
typedef struct localm {
  uint8_t IpAdr[IP_ADDR_LEN];           ///< Local IP Address
  uint8_t DefGW[IP_ADDR_LEN];           ///< Default GateWay
  uint8_t NetMask[IP_ADDR_LEN];         ///< Net Mask
  uint8_t PriDNS[IP_ADDR_LEN];          ///< Primary DNS Server
  uint8_t SecDNS[IP_ADDR_LEN];          ///< Secondary DNS Server
} LOCALM;

Я правильно понимаю что все тут?
vlad_new
Ну на счет "все" - это смотря что надо. Лично мне нужны были ещё nlocalm[], lhost_name[], own_hw_adr[]. А так же мне пришлось подправить файл конфигурации Net_Config.c, поскольку там некоторые переменные были объявлены как константы, а мне их надо было менять. К примеру мне нужна была индикация наличия соединения по DHCP. Долго пришлось ковыряться. В результате получилась такая ф-ция: void dhcp_check(void){ if((*(unsigned int)&localm)!=0) LED_DHCP_ON; } Поскольку библиотека постоянно меняется от версии к версии, то и варианты её использования то же могут отличатся. Я пользую 4.73 и как там в 5.xx не знаю.
smk
С версией 4,73 проблем нет, все работает. С версией 5 нужно. Смотрел кейловский хелп. В одном месте написано, что можно менять на лету, но в другом месте упомянутая структура юзером использоваться не должна, что собственно и вижу. Потому и спрашиваю может кто уже дальше продвинулся в этом вопросе и может подсказать что?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.