|
ARM и AVR cравнение плотности кода |
|
|
|
Feb 21 2008, 09:59
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(aaarrr @ Feb 21 2008, 11:57)  Компилятор просто начнет "делать" из 32-х битного процессора восьмибитный, с соответствующим оверхедом. Для примера сложение двух 32-битных чисел на 8-битном uC. Требуется: - 4 сложения - 6 сложений переносов - SWAPы, т.к. регистров не хватает.
|
|
|
|
|
Feb 21 2008, 10:19
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(Rst7 @ Feb 21 2008, 13:01)  А если еще и signed char, то вообще мраки начинаются... Да тоже самое что и unsigned char, просто сдвиг другой для unsigned используется пара LSL/LSR а для signed LSL/ASR. Вообще что бы код хорошо работал и на ARM и на AVR, я все локальные переменные объявляю uint_fast8_t, и все операции с переменными которые в памяти делаю через временные локальные объявленные как uint_fast8_t. Тогда все нормально загрузка идет через LDRB, а промежуточные операции все 32 битные (на ARM) Тут главное помнить что uint_fast8_t может быть больше 8 бит.... примерно так Код uint8_t var; void f(uint_fast8_t arg) { uint_fast8_t tmp; tmp = var; if ( tmp > arg) tmp = arg+5; else tmp*=2; var = tmp; }
Сообщение отредактировал KRS - Feb 21 2008, 10:27
|
|
|
|
|
Feb 21 2008, 11:42
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(KRS @ Feb 21 2008, 15:19)  Код uint8_t var; void f(uint_fast8_t arg) { .... } Реальное шаманство. А всего-то надо было в первой строке исправить тип переменной с char на int. Тестировал LPC2132 (без внешней шины) на предмет помехоустойчивости. С помощью искроподжигателя газа (применяющегося в котельных) так и не смог подвесить проц. Даже когда искра (мощная) происходила в 3 см от процессора. Плата простая двухсторонняя.
Сообщение отредактировал GetSmart - Feb 21 2008, 11:48
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|