x893 78 March 26 Posted March 26 · Report post 10 hours ago, mantech said: Вы мне лучше покажите "сервисную" функцию для работы с портом, вот что мне больше интересно))) На github есть 100500 готовых сервиных функций. Скачиваете и смотрите. Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 26 Posted March 26 · Report post 1 hour ago, Serhiy_UA said: Может сделаем так: Кто-то из нас создаст четыре топика: "Raspberry Pi Pico. Старт в Arduino", "Raspberry Pi Pico. Старт в Keil", "Raspberry Pi Pico. Старт в VC Code + C-SDK", а также "Raspberry Pi Pico. Просто разговоры". я только ЗА! В теме Keil я создал похожую тему) Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 28 Posted March 28 · Report post Как в Keil "прикрутить" скрипт для линковщика из SDK? pico-sdk\src\rp2_common\pico_crt0\rp2040\memmap_default.ld там их много разных вариантов ("memmap_blocked_ram.ld", "memmap_copy_to_ram.ld","memmap_default.ld","memmap_no_flash.ld",)в зависимости от где находиться испольняемая программа. Всем этим заведует файл BUILD.bazel Видимо его надо "прикрутить" к проекту и указать в настройках PICO_DEFAULT_LINKER_SCRIPT Вопрос как это сделать? Без этого системная переменная __StackOneBottom не задана значением из файла memmap_default.ld Quote Share this post Link to post Share on other sites More sharing options...
x893 78 March 28 Posted March 28 · Report post 2 hours ago, backa said: Как в Keil "прикрутить" скрипт для линковщика из SDK? pico-sdk\src\rp2_common\pico_crt0\rp2040\memmap_default.ld там их много разных вариантов ("memmap_blocked_ram.ld", "memmap_copy_to_ram.ld","memmap_default.ld","memmap_no_flash.ld",)в зависимости от где находиться испольняемая программа. Всем этим заведует файл BUILD.bazel Видимо его надо "прикрутить" к проекту и указать в настройках PICO_DEFAULT_LINKER_SCRIPT Вопрос как это сделать? Без этого системная переменная __StackOneBottom не задана значением из файла memmap_default.ld Сделайте пустой проект в Keil для RP2040, изучите и потом напишите здесь. А лучше на Хабре. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 March 28 Posted March 28 · Report post У кейла свой компоновщик, это не GCC. Совсем другой формат. Quote Share this post Link to post Share on other sites More sharing options...
x893 78 March 28 Posted March 28 · Report post 2 minutes ago, Arlleex said: У кейла свой компоновщик, это не GCC. Совсем другой формат. Естественно, так у него и sct файл свой есть для этого Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 March 28 Posted March 28 · Report post 4 минуты назад, x893 сказал: Естественно, так у него и sct файл свой есть для этого Ну дык то-то же. backa либо методом тыка все перебирает. В надежде что заработает. Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 28 Posted March 28 · Report post 1 hour ago, x893 said: sct файл свой я знаю про него но не было необходимости что-то меня в нем. Прежний проект на Tiva-C прекрасно компидировался без внесений по умолчанию. 1 hour ago, Arlleex said: backa либо методом тыка все перебирает. В надежде что заработает. Я не люблю тупо не читая чтото делать но а как еще можно чтото сделать "по-написанаму" когда таких инструкций нет от производиьеля процессора и компилятора. Keil дает 2 примера как моргнуть светодиодом и как подключиться к WiFi. Там задейсвовано 1 ядро и все работвет как часики. Я тоже попробовал стандарные интерфейсы - все работает.Но как коснулось использовать 2 ядра - вот тут и вылезло что заявленная поддержка для данного микроконтроллера - ЧАСТИЧНАЯ!!! Вышла новая версия кейла на днях - вряд-ли там чтото исправили.Данный проц не для комерческий и никто не хочет тратить силы на его поддержку. 1 hour ago, Arlleex said: У кейла свой компоновщик, это не GCC. Совсем другой формат. я это уже понял.Но может ему както можно руками прописать про границы стэком для ядер. Ятакого не делал никогда и нигде не нашел как это сделать ((( А потратил уже уйму времени... 1 hour ago, x893 said: Сделайте пустой проект в Keil для RP2040, изучите и потом напишите здесь. А лучше на Хабре. А зачем пустой если я делал тестовые без многоядерности.Все работает и намного шустрее чем VS. Вы думаете что хабр лучше место для таких вопросов?))))) Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 28 Posted March 28 · Report post 1 hour ago, x893 said: так у него и sct файл свой есть для этого Где можно почитать а лучше "подсмотреть" после чтения доков как выглядит файл scr для других "взрослых" многоядерников о NXP и STM32. Чтобы разобраться на реальноработающем scr файле как прописывают параметры и уже потом изменить scr файлдля RP2040. Хочеться довести это до логического конца ( на столе лежит ждет парочка на RP2350 ). Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 March 28 Posted March 28 · Report post Линковщик ведь о многоядерности ничего не знает. Он, по сути, только память размечает, грубо говоря, если [censored] детали. Файл scr для взрослых многоядерников ничем выдающимся отличаться не будет от такого же для одноядерных МК. Формат и синтаксис можно узреть в ARM Compiler 6 Reference Manual. Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 28 Posted March 28 · Report post 5 minutes ago, Arlleex said: Линковщик ведь о многоядерности ничего не знает. Он, по сути, только память размечает, да - я это понял . В scr файле лежать системные "константы" которые используються в программе. Вот в моем случае надо задать значение для __StackOneBottom (0х20040800). Именно изза того что она не задана и происходит чехарда в работе sdkкашной функции. Quote Share this post Link to post Share on other sites More sharing options...
Arlleex 311 March 28 Posted March 28 · Report post 26 минут назад, backa сказал: да - я это понял . В scr файле лежать системные "константы" которые используються в программе. Вот в моем случае надо задать значение для __StackOneBottom (0х20040800). Именно изза того что она не задана и происходит чехарда в работе sdkкашной функции. К примеру LOAD1 0x08000000 917504 { FLASH 0x08000000 917504 { *.o (RESET, +first) *(InRoot$$Sections) .any (+ro) } SRAM1_NOINIT 0x20000010 UNINIT 16 { *.o (.bss.bootInfoSection) } SRAM1 0x20000080 114560 { .any (+rw, +zi) } } extern u32 Image$$SRAM1$$Base; volatile u32 *sramAddr = (u32 volatile *)&Image$$SRAM1$$Base; Теперь sramAddr будет указывать на память по адресу 0x20000080. Это? Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 28 Posted March 28 · Report post 4 minutes ago, Arlleex said: Это? Похоже на то чтотя спрашивал и что в итоге мне нужно сделать.Попробую чуть попозже и отпишусь . Однозначно мне надо читать как правильно создавать и редактировать scr файл если я хочу все-таки поработать в любимом )) Keil с RP2040 и RP2350. Quote Share this post Link to post Share on other sites More sharing options...
Serhiy_UA 1 March 29 Posted March 29 · Report post On 3/28/2025 at 7:49 PM, backa said: RP2040. Я на второй странице оставил архив с двумя примерами при работе связки RP2040 + Arduino. Оба примера работающие. Один на непрерывное программное переключение пина с частотой 33 МГц на самом низком регистровом уровне. А второй пример - инициализация и работа двух ядер, каждое со своим светодиодом, здесь уровень повыше с функциями. Посмотрите, может заинтересует. У меня неспешный проект с фото-видео камерой, нужно быстродействие на входах, а также производительность для алгоритма, и здесь два ядра кстати. Arduino IDE с такой задачей справляется. Quote Share this post Link to post Share on other sites More sharing options...
backa 1 March 29 Posted March 29 · Report post 52 minutes ago, Serhiy_UA said: Посмотрите, может заинтересует. Спасибо! Скачаю и обязательно исследую - может себе чтото подчерпну))) 52 minutes ago, Serhiy_UA said: здесь два ядра кстати. Arduino с такой задачей справляется. Потратив некорое количество времени ( как тут заметили , что я методом тыка все перебираю))) я могу сказать что немного изучил эту тему. У Keil проблема с многоядерностью изза того что они не до конца сделали поддержку данного контроллера. Точнее они "забыли" нужным образом видоизменить srt файл из .ld файла который находиться в SDK. Я пришел к выводу , что IDE , которые использую CMake файл для компиляции по-умолчанию используют это .ld файл с разметкой памяти для 2х ядер. Я больше чем уверен что Arduino тоже использует CMake файл как и MS VS, IAR VS CODE. Quote Share this post Link to post Share on other sites More sharing options...