ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
14594 Топик полностью
Bill (15.09.2004 21:06, просмотров: 1) ответил Bill на 2 IgorKossak и др. Для дополнения темы. Поскольку я имею некоторый опыт
Все остальное здесь Процессор Z80 имеет небольшое число регистров и ЕДИНОЕ адресное пространство. Для выполнения операций над типами long и float регистров процессора недостаточно, поэтому один из операндов должен размещаться в памяти. Для хранения этих операндов в ОЗУ выделялись специальные ячейки под аккумуляторы данных типов (long и float). Все константы этих типов размещались в программной секции $$INIT. Для выполнения операций с данными этих типов (в том числе операций сравнения) генерировался вызов служебных подпрограмм. Процессор AVR имеет достаточное число регистров для размещения обоих 32-разрядных операндов, поэтому константы сразу же размещаются в регистрах побайтно, им не нужно выделять оперативную память. В случае использования типов long long и double, регистров процессора уже недостаточно для их размещения, и для них требуется дополнительная память, примерно так, как сделал в свое время я сам для Z80. Это первое предположение. Далее, поскольку адресные простанства программ (ПЗУ) и данных(ОЗУ) разделены, то механизмы доступа к константам и данных должны быть различны. Кроме того, поскольку для выполения операций над данными должны вызываться соответствующие подпрограммы (это второе предположение), то они сделаны в предположении, что операнды расположены в ОЗУ (как наиболее общий случай). Компилятор не различает мест размещения данных. Поэтому вполне естественно, что все константы указанных типов должны при инициализации программы в startup должны пересылаться в SRAM. Третье (и последнее) предположение. Поскольку тип long long стал доступным только в последних версиях компилятора, то можно надеяться, что в последующих версиях для работы с данными типа long long будут добавлены отдельные специальные подпрограммы для работы с константами в программной памяти. Еще раз подчеркиваю, что это только лишь мои предположения, не более.