misyachniy 0 9 января Опубликовано 9 января · Жалоба Подправлял рабочий проект доставшийся в "наследство". Все нормально собирается и работает, до тех пока попробовал добавить еще одну переменную в разделяемую память Добавил одну переменную 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] То есть, не видит часть переменных и функций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 10 января Опубликовано 10 января · Жалоба 17 hours ago, misyachniy said: Компилятор транслирует без вопросов, а линкер выдает следующую ошибку: volatile short RP_count3=0; У вас не получается при линковке, что RP_count3 / test_share_data очищается ещё и в Core.c? Задавать начальные значения можно только в sml2, в остальных местах extern без начального значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 11 января Опубликовано 11 января · Жалоба 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. Завтра попробую еще поэкспериментировать может дополнительная инфа появится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 12 января Опубликовано 12 января · Жалоба 12 hours ago, misyachniy said: Как только добавляю test_share_data, линкер высыпает много ошибок, я привел часть: две переменные "ANG " и "Ampl " и функцию "ANLS_FLD(int, int) " Если только в sml2 добавить переменную и нигде на нее не ссылаться? Если переменная в sml2 будет последняя в файле? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 15 января Опубликовано 15 января · Жалоба On 1/12/2024 at 11:27 AM, _4afc_ said: Если только в sml2 добавить переменную и нигде на нее не ссылаться? Если переменная в sml2 будет последняя в файле? Немного потестил. Переменные и функции sml2 связаны с coreA. С coreB ничего связано. Переменная объявленная в sml2, в coreA работает без вопросов. Как только test_share_data объявляю в coreB, сразу начинают сыпаться ошибки линкера о неизвестных переменных и функциях при линковке ядра B. Похоже некорректные объявления. Тело функций и переменные объявлены в coreA, в sml2 как extern. Линкер перепроверяет (?) соответствие и не может проверить? Завтра продолжу исследования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 15 января Опубликовано 15 января · Жалоба 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 кроме данных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
misyachniy 0 22 января Опубликовано 22 января · Жалоба 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 внутри функции. не может быть наложения друг на друга? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться