kan35 7 14 ноября, 2023 Опубликовано 14 ноября, 2023 · Жалоба Всем доброго дня! Столкнулся со странным поведением компилятора MCC18 в обычном режиме и решил попробовать extended mode. Переключил, собралось, код даже изрядно уменьшился. Все с виду хорошо, но вот что не получается: секции .tmpdata и .MATH_DATA упали в область дальней памяти (НЕ с 0 до 5F как в обычном режиме): .tmpdata udata 0x000d78 data 0x00000e .udata_uart.o udata 0x000d86 data 0x000009 .udata_mdb.o udata 0x000d8f data 0x000009 .idata_timers.o idata 0x000d98 data 0x000006 MATH_DATA udata 0x000d9e data 0x000004 и при чем между этими блоками памяти лежит еще всякое... В не extended mode эти два блока падают подряд с 0го адреса: MATH_DATA udata 0x000000 data 0x000014 .tmpdata udata 0x000014 data 0x00000f .stack udata 0x000060 data 0x00003e Как я понимаю, это пространство памяти - с убыстренным доступом, что не актуально в extended. А я должен сохранять эти два блока (по сути контекста) в стек потому что у меня FreeRTOS. Но как бы сделать так, чтобы эти две секции легли опять с 0го адреса и подряд? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kan35 7 14 ноября, 2023 Опубликовано 14 ноября, 2023 · Жалоба Похоже разобрался с проблемой в не-extended режиме, она проявлялась в виде некорректного чтения переменных, скорее всего из-за ситуации с доступом к памяти по укороченной схеме (когда переменные числятся в 1 банке). Как я понимаю, с включенной опцией "Banking opimizer" в контексте задачи может быть совершенно не определенно в какой банк процессор нацелен при попадании в следующую задачу ОС. Отключив опцию Bank optimizer проблема как будто бы и решилась. Код, конечно, еще увеличился, что не радует. И самое плохое, я как то теперь побаиваюсь - что еще может всплыть в этой банкированной системе... Поэтому, проблема сделать порт под extended mode продолжает оставаться актуальной. В этом режиме проц работает в без банковом доступе к памяти и это правильно. Прошу откликнуться знатоков PIC18 и С18. Прикрепляю port.c если вдруг кто-то захочет поправить его как следует)) а нужно всего то сохранить и восстановить контекст))))... port.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться