Ошибка чтения памяти платы Sable

Обновлено: 03.07.2024

Соболь появился давно. Впервые анонсированная Shedworks еще в 2018 году, она более или менее стабильно год за годом попадала в наш список самых ожидаемых инди-игр. Теперь мы наконец-то можем перестать его ждать, потому что он уже здесь, и это здорово.

Вдохновленная, среди прочего, пустынной планетой Джакку из «Звездных войн», Sable – это игра, в которой вам предстоит исследовать фантастические пустынные ландшафты и погрузиться в атмосферу научной фантастики. Вы играете за Сейбл, когда она начинает свое Планирование, обряд перехода во взрослую жизнь, где вы должны покинуть комфорт своего сообщества и отправиться в мир в поисках маски, которая лучше всего отражает вашу личность, отношение и амбиции.

И это то, что вы делаете в Sable. Вы покидаете маленькую долину своего детства, как Элой в Horizon Zero Dawn и бесчисленных других играх с открытым миром, которые ограничивают вас в относительно небольшом пространстве для обучения и ранних этапов игры. Оттуда вы можете отправиться в любом направлении, исследовать все, что вас интересует на горизонте. И есть так много всего, что может сделать именно это.

Игра выглядит фантастически, как сюрреалистический комикс, вдохновленный дымкой «Звездных войн», «Дюны» и других научно-фантастических признаков, о которых вы смутно знаете. Пейзаж, поначалу кажущийся бесплодным, настолько полон фантазии и нежной, песчаной красоты, что буквально в любой точке можно сделать скриншот и иметь красивую ячейку в личном комиксе. Вы исследуете древние руины, которые лежат наполовину под землей, отвоеванные пустыней или природой. Вы столкнетесь с природными достопримечательностями, такими как великие долины и скалы. Вы столкнетесь с чем-то потусторонним, связанным с миром смесью технологий и магии, которая становится неразличимой. И все это выглядит фантастически. Даже бег по лестнице в Sable вызывает ощущение движения и благоговения, которое не удается передать другим, гораздо более масштабным играм.


Это прекрасно дополняется художественным стилем игры и использованием цвета. Sable выглядит как ничто другое, во что вы можете играть, в нем есть что-то почти нарисованное от руки. Линии разрезают окружающую среду блочными цветами, которые так блестяще передают ощущение объекта. И эти цвета тоже меняются. Когда на мир опускается ночь, дальность прорисовки не приближается к вам. Вместо этого цвета исчезают из мира, оставляя меняющуюся шкалу синего и серого, которая предлагает совершенно иной взгляд на бескрайнюю пустыню.

Потому что мир большой или, по крайней мере, достаточно большой. Хотя технически это не может сравниться со страной, охватывающей карты Assassins Creed или других обширных игр с открытым миром, это и не нужно. Эта пустыня простирается, позволяя вам проводить много времени, занимаясь серфингом по песчаным дюнам на своем ховербайке, не оставляя вам ничего, что можно было бы сделать или увидеть. Верховая езда — это весело, поэтому в Соболе у ​​вас будет достаточно времени для этого. И ориентиры, которые вы хотите исследовать изначально, находятся достаточно далеко друг от друга, и вам кажется, что вы путешествуете, чтобы добраться до них. Когда вы играете в Sable, вы чувствуете, что находитесь в грандиозном приключении, и это важно, а не фактический квадратный километр игры.

Чего вы не почувствуете, так это чувства угрозы или опасности. Соболь — мирная игра, и, если не считать некоторых ужасающих падений с высоты, которые можно полностью свести на нет благодаря вашему падающему пузырю из перьев, вы всегда в полной безопасности. Некоторых игроков это может оттолкнуть, особенно учитывая то, что игра постоянно отдает дань уважения Breath of the Wild, но это путешествие об исследовании и самопознании, а не о насилии. Это также означает, что фундаментальную механику игры можно разбить на платформер и исследование, и оба они реализованы невероятно хорошо.

Когда вы не мчитесь в безбрежное голубое небо на своем велосипеде или не мчитесь по огромной выгоревшей на солнце грудной клетке, вы можете просто разговаривать с другими странниками пустыни. Диалог в игре простой, в основном это разговоры с людьми для получения квестов и подсказок. Но несмотря на это написано красиво. Проза разбивает разговоры, чтобы подчеркнуть экспрессию, тон и настроение, о чем часто забывают за пределами самых многословных ролевых игр, и это работает очень хорошо. Вы получаете представление о Сэйбл и других по тому, как их описывает игра, и для этого требуется всего несколько строк.


Любые проблемы с игрой несколько иронически поверхностны. Как уже упоминалось, Breath of the Wild послужил источником вдохновения для спокойного исследования игры, и это наиболее очевидно в полосе выносливости. На что угодно можно взобраться, но это требует выносливости, но, в отличие от BotW, полосу выносливости Соболя читать намного сложнее.Это происходит не из-за плохого дизайна, потому что он выглядит красиво — и игра с любовью удерживает экран от ненужного шума, если вы не хотите его найти, — а потому, что скорость, с которой он уменьшается, кажется, меняется. Первые несколько ручных захватов стоят почти половины вашей первоначальной выносливости, а последние несколько дюймов силы длятся дольше, чем ожидалось. Я думаю, что студия хотела сделать лазание немного более «захватывающим», заставив планку постоянно находиться в нижней половине, но это, как правило, просто затрудняет изучение того, сколько вы можете подняться.

Еще одна проблема, если ее можно так назвать, — велосипед. Как только вы приобретете свой настоящий велосипед с его правильным именем, вы будете скользить по дюнам с чувством тихой безмятежности. Дыма первого байка, как и кашляющего мотора, больше нет. Но вы можете чувствовать себя не так безмятежно, как вы ожидаете, благодаря комично вращающейся графике. Ваш велосипед может попытаться перевернуться в метре от падения или неконтролируемо трястись, когда вы безвредно проезжаете мимо некоторых осадочных камней. Это никак не влияет на вождение, но может немного отвлечь от впечатлений, хотя бы на мгновение.

Sable — фантастическая игра. По его собственным словам, вам нечего делать, поэтому у вас есть чем заняться на его пропитанном песком ландшафте. Он выглядит потусторонним и требует изучения, а за каждым горизонтом обещают новые приключения. История, или, скорее, исследование культуры и истории людей, с которыми вы сталкиваетесь, увлекательна и дает вам столько же поводов для исследования, сколько и пение сирен далеких достопримечательностей.

Проверено на ПК (код предоставлен издателем).

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

Я использую пример simple_periphearal для отправки данных с датчика на телефон Android.

Я могу взять данные и отправить их на андроид. Но иногда у меня возникают потери пакетов.

Когда мы попытались захватить данные по радиоканалу, мы увидели, что Master отправляет Unexp. SN в качестве подтверждения пропущенных пакетов.

Здесь я добавляю захват сниффера. Мы пропустили пакет номер 856 на стороне Android.

Почему это происходит? Можно ли узнать об этой ошибке на периферийной стороне и снова передать тот же пакет?

Возможно, сниффер пропустил ответ ведомого устройства на пакет 857, потому что в 858 биты SN/NESN указывают, что ведущее устройство успешно получило по крайней мере один пакет между 857/858. По общему признанию, SN/NESN немного сложен, и я бы порекомендовал вам прочитать спецификацию Bluetooth для хорошего объяснения.

В любом случае протокол/спецификация канального уровня BLE не позволяет отбрасывать пакеты, и контроллеры LE будут продолжать повторную передачу до тех пор, пока связь не будет разорвана или пакет не будет подтвержден.

Возможно, что Android/iOS и (даже) CC2640 могут отбрасывать входящие пакеты на пути вверх через более высокие уровни стека из-за проблем с выделением памяти или по другой причине, но вы мало что можете с этим поделать, кроме наличия приложения. управление уровнем потока/подтверждение.

С уважением,
Аслак

Привет, Аслак,
Возможно, Сниффер ошибается с одним или двумя пакетами, но наблюдение такое же, как и при потере данных.
Мастер отправляет ACK-OK и в следующем пакете отправляет Unexp SN. Этот пакет сбрасывается на телефон Android без уведомления прикладного уровня.
Почему это происходит? Какое решение для этого?

Спасибо,
Бхарат

Мастер не отправляет Unexp SN, это интерпретация снифферов. Вы можете видеть, что в предыдущем подчиненном пакете на канале 0x21 был установлен бит MD, что указывает на то, что он собирался отправить что-то после пакета 857.

Я считаю очень маловероятным, что отсутствие пакета снифером по какой-либо причине связано с фактической потерей данных, поскольку вы можете видеть, что мастер признал это. Откуда вы знаете, что пакет, отсутствующий в анализаторе, — это именно тот, который отсутствует в вашем приложении для Android?

Что касается того, почему сниффер пропускает пакет, то RF по своей сути ненадежен, поскольку в любой момент могут возникнуть помехи. В соединении ведущий/ведомый обычно существует метод, с помощью которого любая сторона может запросить повторную передачу потерянного пакета. Сниффер не может этого требовать.

Возможно, вы пытаетесь отправить больше пакетов от ведомого устройства, чем Android хочет получить. В этом случае исходящий буфер TX на подчиненном устройстве, который имеет ограниченное количество слотов, будет заполнен, и вы получите статус, отличный от SUCCESS (0x00), когда вы вызываете GATT_Notification для отправки пакета. В этом случае ваши приложения обязаны попытаться отправить это позже.

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

Теперь NVS_Init происходит, но NVS_Open не работает. Я правильно делаю?? Какие изменения я должен сделать?? Предоставляет ли TI какой-либо подтверждающий документ?? Поддерживает ли CC2640R2F NVS??

Пожалуйста, помогите мне, это срочно

Заранее спасибо,

Стебин Дж. Таракан

Если я не ошибаюсь, SaBLE-x-R2 использует пакет RHB 5x5 мм, но пример nvs предназначен для пакета 7x7. Возможно, вам придется изменить файл платы, чтобы он заработал.

Привет,
Извините за задержку. На самом деле, я использую файл конфигурации для пакета RHB 5x5 мм, хотя я не получил вывода. Я хочу знать схему памяти SABLE-x-R2 5x5mm RHB. Также какова региональная база SNV в модуле R2? Пока я указываю базовый адрес региона как 0x1B000. я получил ошибку, так как выбранная область перекрывается с памятью программы. я не знаю, почему .. кто-нибудь может подсказать, где точно находится cc2640r2f? Пожалуйста, помогите мне.. Это срочно

это означает, что флэш-память не открывается, т. е. не удается получить доступ к адресу флэш-памяти. я хочу знать базу региона cc2640 r2. Я думаю, что ошибся с неправильным базовым адресом. Я искал управление памятью в cc2640r2, но ничего не получил. Кто-нибудь знает, что такое базовый адрес SNV в cc2640r2??

Заранее спасибо

Стебин Дж. Таракан

Для пространства памяти NVS нет реального жесткого базового адреса, вы можете указать его где угодно (при условии, что у вас есть место и оно выровнено).

0x1B000 — это адрес, используемый в примерах файлов платы, и он выбран так, чтобы соответствовать области 4 x 0x1000 NVS в «конце» области FLASH. FLASH заканчивается на 0x20000, это означает, что конец области NVS будет 0x1F000 (при этом остается последняя страница, содержащая CCFG).

Если вы получаете сообщение об ошибке, говорящее о том, что ваши области памяти перекрываются, это, скорее всего, связано с тем, что область NVS не соответствует оставшейся памяти (ваша программа должна выйти за отметку памяти 0x1B000). Вы можете попробовать использовать меньший регион NVS, например 1x 0x1000, и поместить его в 0x1E000, чтобы посмотреть, сможете ли вы его подогнать.

Также я рекомендую вам взглянуть на пример, предоставленный YiKai, и сравнить файлы платы и компоновщика между этим примером проекта и вашим.

Спасибо за повтор, он мне помог. Теперь ошибка устранена, но nvsHandle = NVS_open(Board_NVS0, &nvsParams); не работает. Я изменил изменения для модуля sablex. Нужно ли добавлять файл cfg??

спасибо, ваш ответ - карта памяти для cc2640 и cc2640r2 одинаковая?? я не нашел никакого документа для этого

Спасибо,
Стебин Дж. Таракан

Здравствуйте, Карта памяти такая же, вы можете найти ее на странице 225 в Техническом справочном руководстве. Большая разница между CC2640 и CC2640R2 заключается в том, что последний содержит дополнительное пространство ПЗУ, чтобы освободить больше системной флэш-памяти для приложений.

Есть несколько причин, по которым NVS_open() может дать сбой (вернуть NULL):

Ваш "NVS_count" в заголовке файла платы меньше указанного вами (Board_NVS0). Это не должно быть проблемой, если ваши файлы платы верны. Сравните файл board.c/.h с файлом панели запуска и убедитесь, что разделы NVS совпадают.

Ваш драйвер NVS уже открыт.

Ваша база региона NVS не выровнена по страницам.

Ваш регион NVS меньше размера сектора.

Размер вашего региона NVS не кратен размеру региона.

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

Спасибо за ответ, сэр. Вот board.c/.h.. пожалуйста, скажите мне, что в этом есть что-то странное.. и следующий код - это то, как я закодировал NVS_init, open(), а также дескрипторы, инициализацию параметров..

NVS_Handle nvsHandle;
NVS_Attrs regionAttrs;
NVS_Params nvsParams;
NVS_init();
Display_print0(dispHandle,14,0,"после инициализации");
NVS_Params_init(&nvsParams);
nvsHandle = NVS_open(Board_NVS0, &nvsParams);

if (nvsHandle == NULL) Display_print0(dispHandle,13,0,"NVS_open() не удалось.");
// возврат (NULL);
>
else
Display_print0(dispHandle,15,0,"NVS_open() ok.");

Заранее спасибо

Мне кажется, что в файле .c платы что-то не так. Прежде чем приступить к этому, не могли бы вы убедиться, что «Board_NVS0» переопределяет «CC2640R2_SABLEXR2_NVS1F000»? Кроме того, какую версию SDK вы используете и пытаетесь ли вы разместить пространство NVS в ОЗУ или во флэш-памяти?

Используемый SDK: Simplelink_cc2640r2_sdk_1_40_00_45

Планирую разместить NVS во flash в sram. Есть проблема??

Теперь я также получаю ту же ошибку. Есть ли разница в памяти между пакетом cc2640r2-7*7 и пакетом 5*5?

Заранее спасибо

Стебин Дж. Таракан

Между пакетами нет разницы в памяти.Однако я не уверен, что понимаю, что вы имеете в виду под размещением раздела NVS во флэш-памяти в SRAM. Вы имеете в виду, что хотите, чтобы раздел NVS находился как во флэш-памяти, так и в SRAM?

Если вы хотите использовать 4 КБ флэш-памяти в качестве пространства NVS, не могли бы вы внести следующие изменения в раздел NVS вашего файла платы (по сути, скопировав вставку из примера файла платы, на который я ссылался ранее):

/*
* Поместите зарезервированные флэш-буферы в раздел .nvs.
* Раздел nvs будет размещен по адресу NVS_REGIONS_BASE с помощью
* командного файла компоновщика gcc.
*/
__attribute__ ((section ("".nvs")))
static char flashBuf[SECTORSIZE * 4];

const uint_least8_t NVS_count = CC2640R2_SABLEXR2_NVSCOUNT;

/* Выделить объекты для NVS и NVS SPI */
NVSCC26XX_Object nvsCC26xxObjects[1];
NVSSPI25X_Object nvsSPI25XObjects[1];

ЗАМЕНИТЕ HWAttrs НА:

/* Атрибуты оборудования для NVS */
const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = .regionBase = (void *)flashBuf,
.regionSize = SECTORSIZE * 4,
>,
>;

раздел nvs в файле платы

статический uint8_t verifyBuf[VERIFYBUFSIZE];

/*
* Поместить неинициализированный массив в NVS_REGIONS_BASE
*/
__no_init static char flashBuf[REGIONSIZE] @ NVS_REGIONS_BASE;

/*
* Поместите флэш-буферы в раздел .nvs, созданный в файле компоновщика gcc.
* Раздел .nvs обеспечивает выравнивание по границе сектора, но может
* размещаться в любом месте флэш-памяти. При желании в разделе .nvs можно установить
* фиксированный адрес, изменив следующее в файле компоновщика gcc:
*
* .nvs (FIXED_FLASH_ADDR) (NOLOAD) : AT (FIXED_FLASH_ADDR ) * *(.nvs)
* > > REGION_TEXT
*/
__attribute__ ((section (".nvs")))
static char flashBuf[REGIONSIZE];

/* Выделить объекты для NVS и NVS SPI */
NVSCC26XX_Object nvsCC26xxObjects[1];
NVSSPI25X_Object nvsSPI25XObjects[1];

/* Атрибуты оборудования для NVS */

const NVSCC26XX_HWAttrs nvsCC26xxHWAttrs[1] = .regionBase = (void *)flashBuf,
.regionSize = SECTORSIZE * 4,
>,
>;


/* Атрибуты оборудования для NVS SPI */
const NVSSPI25X_HWAttrs nvsSPI25XHWAttrs[1] = .regionBaseOffset = 0,
.regionSize = REGIONSIZE,
.sectorSize = SECTORSIZE,
.verifyBuf = verifyBuf,
.verifyBufSize = VERIFYBUFSIZE,
.spiHandle = NULL,
.spiIndex = 0,
.spiBitRate = 4000000,
. spiCsnGpioIndex = CC2640R2_SABLEXR2_GPIO_SPI_FLASH_CS,
>,
>;

const uint_least8_t NVS_count = CC2640R2_SABLEXR2_NVSCOUNT;


есть ли ошибка?? теперь я получаю ошибку компилятора следующим образом:

Описание Тип расположения пути к ресурсу
неразрешенный символ GPIOCC26XX_config, первое упоминание в C:/ti/simplelink_cc2640r2_sdk_1_40_00_45/source/ti/drivers/lib/drivers_cc26x0r2.aem3 ble5_simple_peripheral_cc2640r2lp_app C/C++ Проблема

"Для тех, кто любит исследовать, я не могу рекомендовать Sable достаточно. Каждый элемент — красивая графика, увлекательное прохождение и управляемый игроком сюжет — работают вместе, чтобы я просто потерял себя в этом мире».
Информатор игр

"Уникальный художественный стиль Сейбл, запоминающиеся персонажи и квесты, а также привлекательная открытая формула надолго запомнятся мне".
IGN

Об этой игре


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

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

Уникальный стиль рисовки и саундтрек от Japanese Breakfast видит неповторимую игру, в которой можно не торопясь наблюдать игровой мир Сэйбл. множество чудес этого мира только и ждут, когда вы их встречаете. Не бойтесь делать первый шаг.


• Исследуйте открытый мир, где каждый на шагу – следы приближающихся цивилизаций.

• Карабкайтесь, прыгайте, скользите – викорируйте все возможности, чтобы покорить этот удивительный мир.

• Находите или получайте детали для своего байка и модифицируйте его, чтобы скорректировать с использованием на пути к врачу.

• Помогайте встреченным на пути кланам и одиноким кочевникам.

• Окунитесь в приключение и помогите героине понять, кто она. А затем використовуйте широкий выбор масок, костюмов и приближающихся событий, чтобы приблизиться к этому всему миру…

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

Системные требования