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

Ethernet под Keil5

Никак не получается запустить сеть из под Keil5. Железо рабочее. Проектик из под Keil4 работает хорошо. Все делаю по инструкции и не работает. Помогите понять что я упускаю (или не знаю). Интересует сеть без ОС. Как я понял там все равно из под netInitialize ();   запускается поток, но может я неправильно все понимаю. Собственно main:


#include "stm32f10x.h"
#include "rl_net.h"



 int32_t tcp_sock;                       // TCP socket handle
 
uint32_t tcp_cb_server (int32_t socket, netTCP_Event event,
                        const NET_ADDR *addr, const uint8_t *buf, uint32_t len);

	unsigned int l;

int main (void)
{

	SystemCoreClockUpdate();

	for(l=0;l<1000000;l++) __nop();
	
	netInitialize ();	
	
  tcp_sock = netTCP_GetSocket (tcp_cb_server);
  if (tcp_sock > 0) {netTCP_Listen (tcp_sock, 4001);}		
	
	while(1)
	{
		l++;
	}
	
}

На всякий случай тестовый проект прикрепляю.

K5_F107.ZIP

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


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

10 часов назад, smk сказал:

Никак не получается запустить сеть из под Keil5. Железо рабочее. Проектик из под Keil4 работает хорошо. Все делаю по инструкции и не работает. Помогите понять что я упускаю (или не знаю). Интересует сеть без ОС. Как я понял там все равно из под netInitialize ();   запускается поток, но может я неправильно все понимаю. Собственно main:

Для TCP-стека нужно периодическое обслуживание. Как минимум - для обслуживания машины состояний TCP. Обычно это какая-то функция вызываемая периодически.

В Вашем коде этого не видно (в main()), а раз "без ОС" - то похоже и нет другой задачи в которой это обслуживание выполнялось бы.

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


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

У STM была AN3966 LwIP TCPIP stack demonstration for STM32F4x7 microcontrollers, там рассмотрены различные API для LwIP и когда они используются,а также есть готовый код.

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


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

Вот такой пример нашел в описании "миграции":

Previous Versions
int main (void) {
  net_initialize();
 
  while(1) {
    net_main ();
  }
}

Network Component v7
int main (void) {
  netInitialize();
 
  while(1) {
    // do anything
  }
}

Это что, не работает?

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


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

Вот они пишут:

Цитата

Ядро Network v7 работает в управляемом событиями режиме в отдельном потоке (netCore_Thread, thread-safe), который создается функцией netInitialize. Базовая обработка запускается с использованием отметки времени каждые 100 мс или при получении пакета. В противном случае netCore_Thread не используется. Функция net_main удалена.

А не работает. У кого-то это работало?

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


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

3 часа назад, smk сказал:

Вот такой пример нашел в описании "миграции":

Это что, не работает?

Что за "миграция", что должно работать и что такое Network v7 ?

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


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

11 часов назад, smk сказал:

Вот они пишут:

А не работает. У кого-то это работало?

Вы изначально писали:

В 23.07.2019 в 21:31, smk сказал:

Интересует сеть без ОС.

а приведённый вами пример требует работы в отдельном потоке ОС (в котором и выполняется периодическое обслуживание стека).

Вас как бы ничего не смущает?  :unknw:

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


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

On 7/24/2019 at 12:06 PM, HardEgor said:

LwIP TCPIP stack

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

http://www.keil.com/pack/doc/mw/Network/html/index.html

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


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

Да. Его и читаю. Толькуо не пойму чем тот поток отличается от бесконечного цикла в main. Они там еще упоминают, что "как правило" выполняется в отдельном потоке. При этом испольсована событийная модель, но при отсутствии событий обрабатывается каждые 100 мС. Вот и пытаюсь это сделать без ОС. Вопрос как?

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


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

2 часа назад, smk сказал:

Да. Его и читаю. Толькуо не пойму чем тот поток отличается от бесконечного цикла в main. Они там еще упоминают, что "как правило" выполняется в отдельном потоке. При этом испольсована событийная модель, но при отсутствии событий обрабатывается каждые 100 мС. Вот и пытаюсь это сделать без ОС. Вопрос как?

Очевидно что в цикле должно что-то выполняться из вашего стека. У Вас же цикл в main() - пустой.

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


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

Крутил-вертел, но ничего без потока не выйдет. Чтобы отработала netInitialize ();   нужно инициальзировать операционку. А если ее инициализировать и не создать ни одного пользовательского потока, то она улетает в osRtxIdleThread, а там  for (;;) .

С операционкой работает, но чтоб без даже не знаю как. И как понять в описании netInitialize:

Цитата

Функция netInitialize инициализирует системные ресурсы, протоколы, потоки и приложения сетевого ядра. Поскольку функция также создает объекты RTOS, RTOS должна быть предварительно инициализирована.

Где поток? или я что-то не додумал?

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


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

37 minutes ago, smk said:

С операционкой работает, но чтоб без даже не знаю как.

Никак. Эта штука сделана на потоках:

https://www.keil.com/pack/doc/mw/Network/html/nw_resource_requirements.html

The Network component uses threads. The Network Core thread is always started. Each Network interface starts its own thread when the interface is enabled. Thread execution starts with netInitialize.

Зато lwip умеет без потоков. Но вам lwip лучше не трогать.

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


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

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

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

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

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

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

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

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

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

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