ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
794950 Топик полностью
renesas.ru (16.11.2017 18:25 - 19:01, просмотров: 115) ответил Evgeny_CD на RX600 - косяк в ядре ->
Пропустил эту тему, но всетаки вставлю свои 5 копеек: Это не совсем косяк ядра, а специфика внутренних шин и указанных команд, на которые обычно не обращают внимание и получают неопределенный результат. В результате Renesas указал прямым текстом в мануале когда их нельзя использовать. Во-первых, нужно понимать, что RMPA и команды манипуляций со строками читают и сохраняют данные по 32бита (строковые могут последнее обращение к данным, которые менее 32бит провести в разрядности, указанной в команде - 8 или 16 бит) Во-вторых, нужно разделить ограничения, описанные в мануале, на использование этих команд: 1) обращение к внешней шине - т.к. ядро может работать c данными, раполагаемыми в любом порядке big или little endian (выбирается при старте), то правильность обращения к данным во внешнем адресном пространстве с другим порядком не гарантируется и запрещено; 2) oбращение к SFR (или как пишет Renesas - I/O Registers) - тут нужно посмотреть на таблицу I/O Register Addresses, которая есть в каждом мануале чтобы понять откуда ограничение: доступ к некоторым SFR разрешен только в указанной разрядности (например, 8 или 16бит), несмотря на то, что по адресам некоторые SFR идут последовательно. Как результат - неизвестно что прочитается и выполнится в вышеперечисленных командах при 32битном обращении. Т.к. с SFR обычно производятся команды чтения и записи, а не RMPA или строковые операции, то компилятор разрешает применение этих команд по умолчанию (для других данных). Но если программист пишет что-то не стандартное, то для такого случая и вводится опция компилятора запрещающая использование этих команд при компиляции.