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

Проблема при добавлении переменных в область памяти sml2 (l2_sram)

Подправлял рабочий проект доставшийся в "наследство".

Все нормально собирается и работает, до тех пока попробовал добавить еще одну переменную в разделяемую память

Добавил одну переменную test_share_data.

#pragma file_attr("sharing=MustShare")
#pragma section("l2_sram")
volatile int test_share_data;
volatile short RP_count3=0;

Компилятор транслирует без вопросов, а линкер выдает следующую ошибку:

[Error li1021]  The following symbols referenced in processor 'p1' could not be resolved:
        'ANG [_ANG]' referenced from 'sml2.dlb[sml2.doj]'
        'ANLS_FLD(int, int) [_ANLS_FLD__FiT1]' referenced from 'sml2.dlb[sml2.doj]'
        'Ampl [_Ampl]' referenced from 'sml2.dlb[sml2.doj]

То есть, не видит часть переменных и функций. 

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


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

17 hours ago, misyachniy said:

Компилятор транслирует без вопросов, а линкер выдает следующую ошибку:

 

volatile short RP_count3=0;

 

У вас не получается при линковке, что RP_count3 / test_share_data очищается ещё и в Core.c?

Задавать начальные значения можно только в sml2, в остальных местах extern без начального значения.

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


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

On 1/10/2024 at 1:08 PM, _4afc_ said:

У вас не получается при линковке, что RP_count3 / test_share_data очищается ещё и в Core.c?

Задавать начальные значения можно только в sml2, в остальных местах extern без начального значения.

В sml2 объявлено много переменных и функций. Весь проект собирается и работает.

Как только добавляю test_share_data, линкер высыпает много ошибок, я привел часть: две переменные "ANG " и "Ampl " и функцию "ANLS_FLD(int, int) "

Обычно компилятор еще на стадии анализа текста выдает ошибку при присвоении начального значения переменной объявленной как extern.

Завтра попробую еще поэкспериментировать может дополнительная инфа появится.

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


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

12 hours ago, misyachniy said:

Как только добавляю test_share_data, линкер высыпает много ошибок, я привел часть: две переменные "ANG " и "Ampl " и функцию "ANLS_FLD(int, int) "

  1. Если только в sml2 добавить переменную и нигде на нее не ссылаться? 
  2. Если переменная в sml2 будет последняя в файле? 

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


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

On 1/12/2024 at 11:27 AM, _4afc_ said:
  1. Если только в sml2 добавить переменную и нигде на нее не ссылаться? 
  2. Если переменная в sml2 будет последняя в файле? 

Немного потестил.

Переменные и функции sml2 связаны с coreA.  С coreB ничего связано. Переменная объявленная в sml2, в coreA работает без вопросов.

Как только test_share_data объявляю в coreB, сразу начинают сыпаться ошибки линкера о неизвестных переменных и функциях при линковке ядра B.

Похоже некорректные объявления. Тело функций и переменные объявлены в coreA, в sml2 как extern. Линкер перепроверяет (?) соответствие и не может проверить?  Завтра продолжу исследования.

 

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


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

9 minutes ago, misyachniy said:

Переменные и функции sml2 связаны с coreA.  С coreB ничего связано. Переменная объявленная в sml2, в coreA работает без вопросов.

Как только test_share_data объявляю в coreB, сразу начинают сыпаться ошибки линкера о неизвестных переменных и функциях при линковке ядра B.

Похоже некорректные объявления. Тело функций и переменные объявлены в coreA, в sml2 как extern. Линкер перепроверяет (?) соответствие и не может проверить?  Завтра продолжу исследования.

Для размещения в sml2.h необходимо объявить в sml2 и там же, если нужно, задать начальное значение. В CoreA.c, CoreB.c - только extern без начального значения.

Или у вас код в sml2 кроме данных?

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


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

On 1/15/2024 at 9:14 PM, _4afc_ said:

Для размещения в sml2.h необходимо объявить в sml2 и там же, если нужно, задать начальное значение. В CoreA.c, CoreB.c - только extern без начального значения.

Или у вас код в sml2 кроме данных?

В sml2.cpp были и код и данные. Перевернул весь проект с ног на голову или наоборот ;-).

Все файлы которые относились к проекту sml2 свел в один. Из sml3.cpp все переменные и функции перенес в sml2.cpp.

Таким образом в проекте(project group) только 2 файла общих для ядер A и B - sml2.cpp и sml3.cpp. В sml3.cpp объявлен только буфер для данных, которые поступают из PPI DMA.

В результате все свелось к одной ошибке
 

Quote

 

[Error li1152]  The following input file(s) must be unique across link:
    sml2.dlb[sml2.doj]
    mapped in:
              common memory '.\Debug/L2_and_L3_common_memory.sm' (2 instances)

Linker finished with 1 error
cc3089: fatal error: Link failed
Tool failed with exit/exception code: 1.
Build was unsuccessful.

 

В интернете только одна такая есть

https://ez.analog.com/dsp/software-and-development-tools/visualdsp/f/q-a/70293/bf561----error-li1152

"The error message tells you what library, and what objects within the library, are causing the conflict. You should then check your LDF for any INPUT_SECTIONS commands that map these libraries/objects, and ensure that there are not multiple INPUT_SECTIONS commands mapping the same data."

Не понятно что искать?

Функции с одинаковыми объявлениями или переменные?

И почему компилятор даже варнинга не выдал?

P.S. Видел  переменные с одинаковым именем в проекте. Одна объявлена как "глобальная" вторая как ststic внутри функции. не может быть наложения друг на друга?

 

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


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

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

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

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

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

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

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

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

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

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