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

 
 
> вопрос к специалистам по CrossWorks, как засунуть биб. функц. в .fast
klen
сообщение Jul 26 2007, 07:36
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Решил посмотреть CW.
Возник вопрос. засунуть функцию в рам получается - достаточно объявить ее с атрибутом секции .fast, но из нее вызываются библиотечные вызовы и весь шик пропадает. Можно ли еще линкеру сказать и библовые функции готовит в рам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
etoja
сообщение Aug 13 2007, 04:14
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



И всётаки прерывания IRQ в Crossworcs отрабатываются неправильно. Даже с заплаткой klena.
Беру LPC2106, разрешаю прерывания от UART0, UART1, TIMER0. Правильно отрабатывает только TIMER0(с заплаткой klena). Без заплатки вообще прерываний нет. Использовал Crossworcs 1.4, 1.6, 1.7.
Компиляция этого же проекта в ICCV7ARM(Imagecraft) и KEIL приводит к правильному результату.

Кстати. Кто-нибудь проверял в Crossworcs опцию
#pragma pack(1)
для выравнивания структур на границу байта?
Go to the top of the page
 
+Quote Post
andreywz
сообщение Aug 15 2007, 08:19
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 31-07-07
Пользователь №: 29 482



Цитата(etoja @ Aug 13 2007, 07:14) *
И всётаки прерывания IRQ в Crossworcs отрабатываются неправильно. Даже с заплаткой klena.
Беру LPC2106, разрешаю прерывания от UART0, UART1, TIMER0. Правильно отрабатывает только TIMER0(с заплаткой klena). Без заплатки вообще прерываний нет. Использовал Crossworcs 1.4, 1.6, 1.7.
Компиляция этого же проекта в ICCV7ARM(Imagecraft) и KEIL приводит к правильному результату.

Кстати. Кто-нибудь проверял в Crossworcs опцию
#pragma pack(1)
для выравнивания структур на границу байта?

Насчёт выравниваний могу посоветовать:
typedef struct {
int var1;
int var2;
short var3 __attribute__ ((packed));
short var4 __attribute__ ((packed));
char var5;
}my_type;

my_type myVar;
Если хочется быстрой работы программы и малого размера кода - писать (__attribute__ ((packed))) для всей структуры не надо! Так как при этом она кладётся без выравнивания и загрузка 2 и 4 байтных переменных происходит побайтно.
Я лично выравнивание в структурах контролирую сам. Атрибут packed пишу только напротив short. Такой код правильно компилируется (int грузится ldr, short - ldrh, char - ldrb) и нормально стыкуется с ассемблерными функциями.
Ну а если ресурсы МК безграничны в рамках данного приложения, то пишем либо packed для всей структуры (тогда она кладётся без выравнивания), либо не пишем пакет вовсе (тогда char и short имеют размер 4 байта)
Напротив char писать packed - не надо! (По крайней мере в последних CrossWorks (1.6).

Кстати у меня имеется корыстный вопросик. Лекарство для CrossWorks 1.7 не подкинете?!?

smile.gif smile.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:31
Рейтинг@Mail.ru


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