реклама на сайте
подробности

 
 
> Cortex-M0, от миландра
wedmeed
сообщение Dec 6 2011, 07:18
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 5-04-11
Из: г.Саратов
Пользователь №: 64 137



На работе собираются взяться за камни на Cortex-M0 (от "Миландр"). Cortex-M3 изучил и суть уже понимаю. Расскажите, пожалуйста, чем отличается M3 и M0?
И еще - если кто имел дело с миландровскими камнями, на какие проблемы натыкались?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Dec 9 2011, 23:12
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (GetSmart @ Dec 9 2011, 13:34) *
Не могли бы Вы предоставить цифры.
Специально я не сравнивал. Это субъективное впечатление. Когда писал переключатель контекста для scmRTOS под М0 обнаружил, что нет множества команд, которые приходится заменять несколькими другими. Также у части команд есть дополнительные, по сравнению с М3, ограничения на операнды, из-за чего опять же приходится использовать несколько других команд вместо одной из системы команд М3.

Сравнить могу переключатель контекста scmRTOS (рукописный ассемблерный кусочек): М0 = 56 байт, М3 - 32 байта. Разница 42%.

Хотя... могу сравнить и весь проект.
Откомпилил весть проект с ключами -mcpu=cortex-m0 и -mcpu=cortex-m3. Размер кода для М0 = 14688, для М3 = 14952. "Ниччччего не пониимаю". Начал изучать map. Разница в системных библиотеках. Из них подтягиваются memcpy, memset, strcmp, strcpy, strlen, strupr. Они в сумме занимают для M0 378 байт, для M3 - 1088 байт. Самая большая разница в strcmp - 20 и 476 байт. Сам код из моих исходников занимает 13848 для М0 и 13580 для М3. Действительно, разница небольшая - в районе двух процентов. К ней можно добавить еще библиотечные функции программного деления (156 байт) - М0 не имеет команд деления.

Мельком глянул дизассемблер strcmp - похоже, они собирались из разных исходников. Значит для корректности сравнения их нужно исключить. В результате получаем пусть на 2...4%, но все же больший код для М0.
Компилятор - гцц, сборка Yagarto 20110328.
QUOTE (RA3WUM @ Dec 9 2011, 21:16) *
А разве не все кортексы допускают невыровненный доступ?
Оказывается - нет.
Из LPC111x/11Cxx user manual:
QUOTE
23.4.3.4 Address alignment
An aligned access is an operation where a word-aligned address is used for a word, or multiple word access, or where a halfword-aligned address is used for a halfword access. Byte accesses are always aligned.
There is no support for unaligned accesses on the Cortex-M0 processor. Any attempt to perform an unaligned memory access operation results in a HardFault exception.
P.S. а я раньше думал, что наоборот, все ARMы не допускают. M3 приятно удивил.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01385 секунд с 7
ELECTRONIX ©2004-2016