С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 4
1

Stm32f4 + Ethernet

19.02.2017, 18:43. Показов 1889. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Проект: Организация сервера на базе Stm32f4.

Добавил в проект HTML файл. Обновил с помощью программы makefsdata файл fsdata.c. Удалил устаревший fsdata.c.

Однако, Отладчик ругается, что HTML файлы, загружаемые в память микроконтроллера,
инициализированы одновременно в двух файлах.
(Error: L6200E: Symbol file__index_html multiply defined (by fs.o and fsdata.o))



Файл fs.c

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "lwip/opt.h"
#include "lwip/def.h"
#include "fs.h"
#include "fsdata.h"
#include <string.h>
 
/** Set this to 1 to include "fsdata_custom.c" instead of "fsdata.c" for the
 * file system (to prevent changing the file included in CVS) */
#ifndef HTTPD_USE_CUSTUM_FSDATA
#define HTTPD_USE_CUSTUM_FSDATA 0
#endif
 
#if HTTPD_USE_CUSTUM_FSDATA
#include "fsdata_custom.c"
#else /* HTTPD_USE_CUSTUM_FSDATA */
#include "fsdata.c"
#endif /* HTTPD_USE_CUSTUM_FSDATA */
 
/*-----------------------------------------------------------------------------------*/
/* Define the number of open files that we can support. */
#ifndef LWIP_MAX_OPEN_FILES
#define LWIP_MAX_OPEN_FILES     10
#endif
 
/* Define the file system memory allocation structure. */
struct fs_table {
  struct fs_file file;
  u8_t inuse;
};
 
/* Allocate file system memory */
struct fs_table fs_memory[LWIP_MAX_OPEN_FILES];
 
#if LWIP_HTTPD_CUSTOM_FILES
int fs_open_custom(struct fs_file *file, const char *name);
void fs_close_custom(struct fs_file *file);
#endif /* LWIP_HTTPD_CUSTOM_FILES */
 
/*-----------------------------------------------------------------------------------*/
static struct fs_file *
fs_malloc(void)
{
  int i;
  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
    if(fs_memory[i].inuse == 0) {
      fs_memory[i].inuse = 1;
      return(&fs_memory[i].file);
    }
  }
  return(NULL);
}
 
/*-----------------------------------------------------------------------------------*/
static void
fs_free(struct fs_file *file)
{
  int i;
  for(i = 0; i < LWIP_MAX_OPEN_FILES; i++) {
    if(&fs_memory[i].file == file) {
      fs_memory[i].inuse = 0;
      break;
    }
  }
  return;
}
 
/*-----------------------------------------------------------------------------------*/
struct fs_file *
fs_open(const char *name)
{
  struct fs_file *file;
  const struct fsdata_file *f;
 
  file = fs_malloc();
  if(file == NULL) {
    return NULL;
  }
 
#if LWIP_HTTPD_CUSTOM_FILES
  if(fs_open_custom(file, name)) {
    file->is_custom_file = 1;
    return file;
  }
  file->is_custom_file = 0;
#endif /* LWIP_HTTPD_CUSTOM_FILES */
 
  for(f = FS_ROOT; f != NULL; f = f->next) {
    if (!strcmp(name, (char *)f->name)) {
      file->data = (const char *)f->data;
      file->len = f->len;
      file->index = f->len;
      file->pextension = NULL;
      file->http_header_included = f->http_header_included;
#if HTTPD_PRECALCULATED_CHECKSUM
      file->chksum_count = f->chksum_count;
      file->chksum = f->chksum;
#endif /* HTTPD_PRECALCULATED_CHECKSUM */
#if LWIP_HTTPD_FILE_STATE
      file->state = fs_state_init(file, name);
#endif /* #if LWIP_HTTPD_FILE_STATE */
      return file;
    }
  }
  fs_free(file);
  return NULL;
}
 
/*-----------------------------------------------------------------------------------*/
void
fs_close(struct fs_file *file)
{
#if LWIP_HTTPD_CUSTOM_FILES
  if (file->is_custom_file) {
    fs_close_custom(file);
  }
#endif /* LWIP_HTTPD_CUSTOM_FILES */
#if LWIP_HTTPD_FILE_STATE
  fs_state_free(file, file->state);
#endif /* #if LWIP_HTTPD_FILE_STATE */
  fs_free(file);
}
/*-----------------------------------------------------------------------------------*/
int
fs_read(struct fs_file *file, char *buffer, int count)
{
  int read;
 
  if(file->index == file->len) {
    return -1;
  }
 
  read = file->len - file->index;
  if(read > count) {
    read = count;
  }
 
  MEMCPY(buffer, (file->data + file->index), read);
  file->index += read;
 
  return(read);
}
/*-----------------------------------------------------------------------------------*/
int fs_bytes_left(struct fs_file *file)
{
  return file->len - file->index;
}
Файл fsdata.c

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "fs.h"
#include "lwip/def.h"
#include "fsdata.h"
 
 
#define file_NULL (struct fsdata_file *) NULL
 
 
static const unsigned int dummy_align__index_html = 0;
static const unsigned char data__index_html[] = {
/* /index.html (12 chars) */
0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
 
/* HTTP header */
/* "HTTP/1.0 200 OK
" (17 bytes) */
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
0x0a,
/* "Server: lwIP/1.3.1 ([url]http://savannah.nongnu.org/projects/lwip[/url])
" (63 bytes) */
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
/* "Content-type: text/html
 
" (27 bytes) */
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
/* raw file data (569 bytes) */
0x3c,0x21,0x44,0x4f,0x43,0x54,0x59,0x50,0x45,0x20,0x48,0x54,0x4d,0x4c,0x20,0x50,
0x55,0x42,0x4c,0x49,0x43,0x20,0x22,0x2d,0x2f,0x2f,0x57,0x33,0x43,0x2f,0x2f,0x44,
0x54,0x44,0x20,0x48,0x54,0x4d,0x4c,0x20,0x34,0x2e,0x30,0x31,0x20,0x54,0x72,0x61,
0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x2f,0x2f,0x45,0x4e,0x22,0x3e,0x0d,
0x0a,0x3c,0x68,0x74,0x6d,0x6c,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x76,0x3d,0x22,
0x75,0x72,0x6e,0x3a,0x73,0x63,0x68,0x65,0x6d,0x61,0x73,0x2d,0x6d,0x69,0x63,0x72,
0x6f,0x73,0x6f,0x66,0x74,0x2d,0x63,0x6f,0x6d,0x3a,0x76,0x6d,0x6c,0x22,0x20,0x78,
0x6d,0x6c,0x6e,0x73,0x3a,0x6f,0x3d,0x22,0x75,0x72,0x6e,0x3a,0x73,0x63,0x68,0x65,
0x6d,0x61,0x73,0x2d,0x6d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x2d,0x63,0x6f,
0x6d,0x3a,0x6f,0x66,0x66,0x69,0x63,0x65,0x3a,0x6f,0x66,0x66,0x69,0x63,0x65,0x22,
0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x77,0x3d,0x22,0x75,0x72,0x6e,0x3a,0x73,0x63,
0x68,0x65,0x6d,0x61,0x73,0x2d,0x6d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x2d,
0x63,0x6f,0x6d,0x3a,0x6f,0x66,0x66,0x69,0x63,0x65,0x3a,0x77,0x6f,0x72,0x64,0x22,
0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,
0x77,0x77,0x2e,0x77,0x33,0x2e,0x6f,0x72,0x67,0x2f,0x54,0x52,0x2f,0x52,0x45,0x43,
0x2d,0x68,0x74,0x6d,0x6c,0x34,0x30,0x22,0x3e,0x3c,0x68,0x65,0x61,0x64,0x3e,0x0d,
0x0a,0x3c,0x6d,0x65,0x74,0x61,0x20,0x68,0x74,0x74,0x70,0x2d,0x65,0x71,0x75,0x69,
0x76,0x3d,0x22,0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x54,0x79,0x70,0x65,0x22,
0x20,0x63,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x3d,0x22,0x74,0x65,0x78,0x74,0x2f,0x68,
0x74,0x6d,0x6c,0x3b,0x20,0x63,0x68,0x61,0x72,0x73,0x65,0x74,0x3d,0x69,0x73,0x6f,
0x2d,0x38,0x38,0x35,0x39,0x2d,0x31,0x22,0x3e,0x0d,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,
0x20,0x72,0x65,0x6c,0x3d,0x22,0x46,0x69,0x6c,0x65,0x2d,0x4c,0x69,0x73,0x74,0x22,
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x53,0x54,0x4d,0x33,0x32,0x46,0x34,0x78,0x37,
0x5f,0x66,0x69,0x6c,0x65,0x73,0x2f,0x66,0x69,0x6c,0x65,0x6c,0x69,0x73,0x74,0x2e,
0x78,0x6d,0x6c,0x22,0x3e,0x0d,0x0a,0x3c,0x6c,0x69,0x6e,0x6b,0x20,0x72,0x65,0x6c,
0x3d,0x22,0x45,0x64,0x69,0x74,0x2d,0x54,0x69,0x6d,0x65,0x2d,0x44,0x61,0x74,0x61,
0x22,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x53,0x54,0x4d,0x33,0x32,0x46,0x34,0x78,
0x37,0x5f,0x66,0x69,0x6c,0x65,0x73,0x2f,0x65,0x64,0x69,0x74,0x64,0x61,0x74,0x61,
0x2e,0x6d,0x73,0x6f,0x22,0x3e,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x53,0x54,0x4d,
0x33,0x32,0x46,0x34,0x78,0x37,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,
0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x73,0x74,0x79,
0x6c,0x65,0x3d,0x22,0x22,0x20,0x6c,0x61,0x6e,0x67,0x3d,0x22,0x45,0x4e,0x2d,0x55,
0x53,0x22,0x20,0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x62,0x6c,0x75,0x65,0x22,0x20,0x76,
0x6c,0x69,0x6e,0x6b,0x3d,0x22,0x62,0x6c,0x75,0x65,0x22,0x3e,0x0d,0x0a,0x48,0x65,
0x6c,0x6c,0x6f,0x20,0x77,0x6f,0x72,0x6c,0x64,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,
0x79,0x3e,0x3c,0x2f,0x68,0x74,0x6d,0x6c,0x3e,};
 
 
 
const struct fsdata_file file__index_html[] = { {
file_NULL,
data__index_html,
data__index_html + 12,
sizeof(data__index_html) - 12,
1,
}};
 
#define FS_ROOT file__index_html
#define FS_NUMFILES 1


Примечательно, что подобные операции в оригинальном проекте от ST стабильно работают.



Подскажите, пожалуйста, что не так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.02.2017, 18:43
Ответы с готовыми решениями:

Stm32f4 + CAN + Ethernet
Здравствуйте! STM32F4 Проект: Управление отправкой и приёмом CAN сообщений через Ethernet с...

STM32F4 ETHERNET + CAN
Здравствуйте! STM32F4 Проект: Управление отправкой и приёмом CAN сообщений через Ethernet с...

Stm32f4 + Ethernet
Здравствуйте! Проект: Организация сервера на базе Stm32f4. Добавил в проект HTML файл....

STM32F4 + Ethernet+ ST802rt1
Проблема: Пытаюсь прикрутит STM32F4 + ST802rt1(RMII) по средством адаптации...

1
1978 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.02.2017, 15:54 2
Ежли в исходниках они действительно объявлены - то вам придется исправить положение, ибо глобальное объявление должно быть таки одно. Если в исходниках нет такого объявления - вам стоит попробовать просто пере-билдить весь проект.
ЗЫ: Возможно, также вариант, что вы просто в кучу скинули несколько проектов, не желая в них разбираться. И указанный компилятором символ объявлен и инициализирован нескольо раз.
0
20.02.2017, 15:54
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.02.2017, 15:54
Помогаю со студенческими работами здесь

Stm32F4 + Ethernet. Прошу помощи
Доброго времени суток. Прошу помощи форумчан в организации соединения PC и МК (Плата:...

Ethernet PHY KS8721 и STM32F4
Всем привет! В интернете гуляет куча схем для соединения микросхем физического уровня Ethernet с...

Передача звука с STM32F4 на PC через Ethernet
Перерыл весь инет, но так и не нашел примера. По частям все есть: ethernet, программирование кодека...

[решено]stm32f4 ethernet phy вопросы
прицепил физику KSZ8051. пытаюсь завести пример с сайта стм - STM32F4x7_ETH_LwIP_V1.0.0. (со своими...

STM32F4
Доброе утро! изучил даташит но так и не понял, какая минимальная обвязка необходини для запуска...

STM32F4 BYPASS_REG
Собственно можно ли не подключать эту ногу вовсе и какой режим при этом будет (BGA_176)?

STM32F4 & Картография
Прицепил GPS (GlobalTop GMS-G6A) к F4-Dyscovery Как считаете, реально ли сделать программу типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru