Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413

Кто на ком стоит?

09.01.2022, 17:34. Показов 2514. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Вопрос к специалистом с широким опытом, т.е. к людям, которые не просто хорошо знают язык С, а имеют опыт его применения в различных устройствах различных изготовителей.
Т.е. речь не о помощи в какой-то конкретной программе, а в понимании особенностей, которые незнакомы обычному низкоквалифицированному пользователю, т.е. мне.

Суть вопроса.
Есть некое устройство, которое через собственное IDE программируется в С.
В этом IDE успешно проходит компиляция, а вот сборщик дает ошибку:
Code
1
lcdtimer.o: redefined symbol _LcdPutString
При этом поиск в Find in Files (*.c, *.h) строки _LcdPutString не обнаруживает.
Зато поиск LcdPutString показывает наличие функции void LcdPutCharPos(int lcdPos, char ch) в
файлах lcdtimer.c и lcdtimer.h
В то же время в ASM files показан файл *romabs.txt, в котором есть _LcdPutString=64024:FCN/VOID
Помогите пожалуйста разобраться, кто на ком стоит? ©
То есть в каком направлении нужно копать чтобы устранить эту ошибку?
Заранее спасибо откликнувшимся.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.01.2022, 17:34
Ответы с готовыми решениями:

ком порт для компьютера без ком
многие жалуются, что возникают проблемы с устройствами подключаемыми по ком-порту однако есть хорошие конвертеры вот один из них ...

Кто покупал девайсы на AliExpress - стоит ли?
Поделитесь опытом: чем выгодно, что плохо? Как вообще процесс происходит?

Может подсказать кто-то что стоит приблизительно такой пк
Все в оригинале и полностью рабочие. Fujitsu Celsius W340 MT P4 631 3 GHz 2 GB Без HDD

55
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 17:31  [ТС]
Студворк — интернет-сервис помощи студентам
У меня lcc.
Вот как, к примеру, выглядит командная строка компиляции :
Code
1
lcc -g -hhw_desc -O5 -fsmall-code -DDEBUG -Iinclude -IC:\VSIDE\libvs1010 -o Emulation-Debug\sdmp3.o sdmp3.c
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 17:39  [ТС]
Обнаружил, что для lcc можно вызвать HELP.
Он на картинке.
Что нужно добавить в ключи, чтобы получить препроцессированный текст?
Миниатюры
Кто на ком стоит?  
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
10.01.2022, 18:43
Цитата Сообщение от ARTMED Посмотреть сообщение
Что нужно добавить в ключи, чтобы получить препроцессированный текст?
Опцию -E

В строке из поста #21 нужно добавить опцию -E и удалить опцию "-o Emulation-Debug\sdmp3.o". Выдача польётся на экран, поэтому её лучше перенаправить в файл

Только это действие нужно сделать для тех строк, которые использовались для получения vs1010d_romabs.o и в lcdtimer.o
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 18:53  [ТС]
Я не могу удалить опцию "-o Emulation-Debug\sdmp3.o
Я могу к опциям -fsmall-code добавить -e и получить опцию -e-fsmall-code
На что получаю ответ:
[CODE]lcc -g -hhw_desc -O6 -e-fsmall-code -DDEBUG -Iinclude -IC:\VSIDE\libvs1010 -o Emulation-Debug\sdmp3.o C:\Users\ART\Desktop\lcdmp3\sdmp3.c
Unrecognized switch: '-e-fsmall-code'

Настройка компилятора одна на весь проект:
Миниатюры
Кто на ком стоит?  
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 19:27  [ТС]
Evg, вот заказанный Вами препроцессорный текст файла lcdtimer.c. (пришлось переименовать, а то на две точки в названии файла ругался).
Вложения
Тип файла: rar lcdtimer_c.rar (10.8 Кб, 6 просмотров)
0
Невнимательный
 Аватар для ft4l
3148 / 1375 / 362
Регистрация: 08.02.2013
Сообщений: 8,086
Записей в блоге: 2
10.01.2022, 20:00
Цитата Сообщение от ARTMED Посмотреть сообщение
ERROR: vslink: Emulation-Debug\lcdtimer.o: redefined symbol _LcdPutString
Цитата Сообщение от ARTMED Посмотреть сообщение
строка компиляции :
lcc -g -hhw_desc -O5 ...
Ругается не компилятор а линкер.
не спец, и мог неправильно что-то назвать
Линкер похоже находит две статически линкуемых функции LcdPutString в объектных файлах или библиотеках.
... Или в двух разных файлах.c есть определения функции с таким именем, или в файле.h который включается в разных .c
Или в статических библиотеках это имя уже используется и надо выбрать другое.
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 20:26  [ТС]
ft4l, выше есть отчет поиска таких проблем.
В файле lcdtimer.h есть объявление функции LcdPutString, а в файле lcdtimer.c её определение.
В файле *romabs.txt есть некое значение _LcdPutString.
В библиотеке IDE есть некий файл *.h с функцией LcdPutString, но в нём она закоментирована.
Это всё.

Добавлено через 11 минут
А теперь обратите внимание на ошибку.
Она ссылается на то, что в файле lcdtimer.o: redefined symbol _LcdPutString.
А откуда этот самый символ _LcdPutString в этом файле взялся-то?
Функция LcdPutString в этом файле есть, а вот символа _LcdPutString нет.
Отсюда и
0
Невнимательный
 Аватар для ft4l
3148 / 1375 / 362
Регистрация: 08.02.2013
Сообщений: 8,086
Записей в блоге: 2
10.01.2022, 20:40
Цитата Сообщение от ARTMED Посмотреть сообщение
символа _LcdPutString нет.
подчёркивание добавляется при создании объектного файла. в коде имя без него. в .o с ним

Цитата Сообщение от ARTMED Посмотреть сообщение
В библиотеке IDE есть некий файл *.h с функцией LcdPutString, но в нём она закоментирована.
Значит она скорее есть в библиотеках, чем где-то ещё.
Закоментированаа почему непонятно... возможно не предполагается её использовать в коде программ
Просто попробуйте поменять в своём коде все строки LcdPutString на MyLcdPutString или типа того
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 20:43  [ТС]
Т.к. LCD мне не нужен, я попытался закомментировать в lcdtimer.c его функцию, и в результате получил вот это:
Code
1
2
ERROR: vslink: could not allocate absolute memory at 0:0x2f..0x2f for section int_MyTimer1InterruptHandler (1 words)
ERROR: vslink: relocation failed
MyTimer1InterruptHandler находится всё в том же lcdtimer.c :
Code
1
2
3
4
5
6
// Timer 1 interrupt handler
#pragma interrupt y 0x2f
void MyTimer1InterruptHandler(void) {
    if (lcdPhase < 8) GpioSetPin(0x03,1); //SD driver fights to drive this. We fight back harder.
    LcdStep();
}
Тот же результат дает переименование функции.
0
10.01.2022, 20:46

Не по теме:

Цитата Сообщение от ft4l Посмотреть сообщение
MyLcdPutString
Если в библтотеках LcdPutString уже делает то что и своя такая функция, то нужна-ли своя ?
как вариант убрать свою функцию и добавить в .h extern перед её декларацией
Если возможные аргументы те-же и в том-же порядке,

0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 21:01  [ТС]
Я переименовывал функцию LcdPutString в LcdPutString2. И в .с и в .h разумеется.
Получал ошибку, которая показаны выше.
Вы полагаете, что если я переименую её в MyLcdPutString, то будет другой результат?
В библиотеках функция LcdPutString встретилась только в одном файле, да и то она оказалась в нём закоментирована.
Или я неправильно Вас понял?
0
Невнимательный
 Аватар для ft4l
3148 / 1375 / 362
Регистрация: 08.02.2013
Сообщений: 8,086
Записей в блоге: 2
10.01.2022, 21:07
Цитата Сообщение от ARTMED Посмотреть сообщение
memory at 0:0x2f..0x2f
В микроконтроллерах я вообще ни вы зуб ногой )
по первой ссылке http://www.123avr.com/03.htm
Вроде пишкт что у ICC другой синтаксис
в ICC :

C
1
2
3
4
#pragma interrupt_handler timer0_ovf_isr:7
{
 код выполняемый при возникновении разрешенного локально и глобально прерывания
}
просто указываем компилятору название функции timer0_ovf_isr которая будет вызываться при возникновении прерывания № 7.
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
10.01.2022, 21:20  [ТС]
Это не AVR. И даже не МК. Это DSP с МК в кишках.

Но язык-то С!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
10.01.2022, 21:49
Цитата Сообщение от ARTMED Посмотреть сообщение
Evg, вот заказанный Вами препроцессорный текст файла lcdtimer.c. (пришлось переименовать, а то на две точки в названии файла ругался)
Есть у меня подозрение, что стартовый подчерк приписывается ко всем символам. Т.е. для переменной/функции с именем trampampam в объектном файле создаётся метка _trampampam. С человеком хоть что-то понимающим это было бы выяснить довольно просто, но с твоим пониманием того, что там происходит, решение вопросов "по телефону" растянется до бесконечности

Цитата Сообщение от ARTMED Посмотреть сообщение
Вопрос к специалистом с широким опытом, т.е. к людям, которые не просто хорошо знают язык С, а имеют опыт его применения в различных устройствах различных изготовителей
В твоём случае нужен человек, который работал конкретно на твоём же компиляторе и собирал конкретно такие же вещи. Какой тут язык (Си или не Си) - принципиальной роли не играет. Тут нужно понимание того, как работает твой линкер, как он работает с картой памяти. Либо ищи человека, который всё вместо тебя сделает, либо сам разберись хотя бы на минимальном уровне. Например, что такое символьная таблица и как её посмотреть. Или каким боком в твоей сборке присутствует упомянутый файл *romabs.txt (если он вообще в сборке присутствует)

Цитата Сообщение от ft4l Посмотреть сообщение
Вроде пишкт что у ICC другой синтаксис
У него не ICC, а LCC - это какой-то довольно старый windows'овский компилятор

Добавлено через 37 секунд
Ещё обратил внимание, что в #3 в строке линковки файл Emulation-Debug\vs1010d_romabs.o присутствует два раза. Хз, это так задумано (например, первое вхождение - часть опции) или нет
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
11.01.2022, 06:09  [ТС]
Evg, иными словами, запрошенный тобою препроцессорный текст ничего не дал?

Добавлено через 3 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Или каким боком в твоей сборке присутствует упомянутый файл *romabs.txt (если он вообще в сборке присутствует)
Он не просто присутствует, без него компиляция не начинается.
По моему очень скромному опыту такие текстовые файлы содержат набор параметров для чипа.
В нем же не только МК, а точнее не столько МК.

Добавлено через 5 минут
Однако, насколько я понял твой пост, причиной ошибки может системный косяк разработчика IDE, при котором полученное функцией после её компиляции значение оказывается одноименным передаваемому в МК параметру. Примерно так?

Добавлено через 42 минуты
ЗЫ. *romabs.txt обозначен в параметра линкера как Startup module.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
11.01.2022, 12:18
Цитата Сообщение от ARTMED Посмотреть сообщение
Evg, иными словами, запрошенный тобою препроцессорный текст ничего не дал?
Он показал, что там действительно нет символа _LcdPutString. Т.е. это уже факт, а не догадка. После этого появилось другое предположение, озвученное в первом абзаце в посте #34. Можешь ради интереса прислать файл lcdtimer.o, но я не уверен, что linux'овые версии readelf/objdump его сожрут, а под виндой я этого делать не умею

Цитата Сообщение от ARTMED Посмотреть сообщение
Он не просто присутствует, без него компиляция не начинается
В твоём случае интересна не компиляция, а линковка

Цитата Сообщение от ARTMED Посмотреть сообщение
ЗЫ. *romabs.txt обозначен в параметра линкера как Startup module
Но в строке запуска линкера из поста #3 этого не видно. Возможно, эта информация доносится до линкера каким-то читерским способом. А возможно, для линковки этот файл вообще не нужен. Это можно было элементарно проверить, повторив ручками строку запуска линкера, но у тебя с этим какие-то проблемы - за пределами IDE ты как-то не умеешь работать
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
11.01.2022, 12:56  [ТС]
Без *romabs.txt не начинается компиляция, а за ней соответственно и линковка.
опции линкера - это не читерство.
Миниатюры
Кто на ком стоит?  
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
11.01.2022, 12:57  [ТС]
lcdtimer .o и .a
Вложения
Тип файла: rar lcdtimer_o_a.rar (10.7 Кб, 3 просмотров)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21286 / 8311 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
11.01.2022, 17:38
Цитата Сообщение от ARTMED Посмотреть сообщение
опции линкера - это не читерство.
Но в них же нету файла с расширением *.txt

Добавлено через 10 минут
Цитата Сообщение от ARTMED Посмотреть сообщение
lcdtimer .o и .a
Файл не распознаётся ни линуксовыми утилитами, ни mingw'шными версиями objdump/readelf. Но через hexdump хорошо видно, что стартовые подчерки есть у большого количества символов. Совсем для очистки совести надо бы посмотреть на ассемблерный файл, но в посте #22 для этого не видно опции. Возможно, что она просто за краем экрана и по аналогии с gcc называется -S. В этом случае надо повторить строку из поста #21, но добавить опцию -S, а опцию "-o Emulation-Debug\sdmp3.o" заменить на "-o Emulation-Debug\sdmp3.s" и уже посмотреть на файл *.s. Но сделать это надо для lcdtimer.c
0
214 / 10 / 2
Регистрация: 23.05.2016
Сообщений: 413
11.01.2022, 17:45  [ТС]
Насколько я понимаю, файл *romabs.o изготавливается из файла *romabs.txt.
Если я уберу из пакета файл *romabs.txt, никакой компиляции вообще не происходит,
вместо этого я сразу же получаю следующее сообщение:
Code
1
C:\VSIDE\bin\make.exe: *** No rule to make target `Emulation-Debug\vs1010d_romabs.o', needed by `Emulation-Debug/LCDMP3.coff'.  Stop.
ЗЫ. Файл *.coff - это конечный продукт линкера, из него делается прошивка.

Добавлено через 4 минуты
Цитата Сообщение от Evg Посмотреть сообщение
Совсем для очистки совести надо бы посмотреть на ассемблерный файл, но в посте #22 для этого не видно опции. Возможно, что она просто за краем экрана и по аналогии с gcc называется -S.
Я еще раз проверил, нет, скрин полный. Опция -S отсутствует.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.01.2022, 17:45

Кто уже юзает Unity 2018.1? Стоит переходить?
ребята ,есть смысл перейти на новую юньку. ? проекты с 2017 нормально открываются ? без ошибок ? а то у меня часто такие проблемы бывают :(

Знатоки, кто знает!? Какой плагин стоит на сайте? ссылка:
Друзья! Подскажите что за плагин строит на этом сайте: http://ug-p.ru/?r=projects/view Плагин каталог, или плагин что бы страницы...

кто знает ,помог и т е , пробросить порты с wlan0 - на eth0 ., стоит ubuntu
кто знает ,помо г и т е , пробросить порты с wlan0 - на eth0 .., стоит ubuntu , , c wlan0(wi-fi) - приходит интернет .., задача пробросить...

Кто подскажет сколько (хоть примерно)стоит зарегистрировать и открыть свой сайт???
Кто подскажет сколько (хоть примерно)стоит зарегистрировать и открыть свой сайт???

Программа, сохраняющая информацию о том, кто работал с файлами на сервере (кто создал, кто редактировал, кто удалил)
Доброго времени суток. Есть сервер (windows), который хранит в общем доступе в локальной сети документы. Появилась необходимость в...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru