Easyelectronics.ru

Электроника для всех
Текущее время: 07 дек 2019, 03:42

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: dsPIC33E проблема с массивами
СообщениеДобавлено: 08 янв 2014, 15:24 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 16 апр 2010, 19:37
Сообщения: 151
Откуда: Тамбов
Привет всем. Такая проблема. Пытаюсь просто объявить массив unsigned int[1000] и МК dsPIC33EP256MU810 перестаёт работать: нет никаких изменений на RE7. RAM у этого МК 28кб, на массив надо 2кб, так что памяти хватает. Если закомментировать unsigned int array[1000], то всё работает. Эксперементально выяснил, что максимальный размер массива = 177 элементов, при котором МК ещё работает. Компилятор XC16 v1.20 free-version (на сайте микрочипа пишут, что для бесплатной версии нет никаких ограничений по использованию памяти). В чем может быть проблема?

Код:
unsigned int array[1000];

int main(void)
{
    // настраиваем тактирование
    CLKDIV = 0b0000000000000011; // N1 = 5 (PLLPRE = 3), N2 = 2 (PLLPOST = 0)
    PLLFBD = 0b0000000000100110; // M = 40 (PLLDIV = 38)
    // итого: Fosc = 20 * (40/(5*2)) = 80 MHz
    // запрещаем вложенные прерывания
    INTCON1bits.NSTDIS = 1;
    // выключаем watchdog
    RCONbits.SWDTEN = 0;
    // ждём запуска PLL
    while(OSCCONbits.LOCK != 1) {};

    // Настраиваем ногу RE7 как выход и будем использовать её для отладки
    ANSELEbits.ANSE7 = 0;
    TRISEbits.TRISE7 = 0;
    Nop();
    PORTEbits.RE7 = 0;

    for(;;)
    {
        asm("BTG PORTE, #7");
    }

    return 0;
}

_________________
The project was compiled with 0 errors, 0 warnings


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dsPIC33E проблема с массивами
СообщениеДобавлено: 08 янв 2014, 16:50 
Старожил

Зарегистрирован: 19 фев 2011, 23:50
Сообщения: 248
Скорее всего компилятор не может правильно разместить массив в памяти. Похожий косяк вчера у меня был(Pic24fj256gb206 96К ОЗУ), решил:
Project ->Build options -> Project -> MPLABC30 -> Memory Model -> Large Data
Но компилятор как видно C30 и обычный MPLAB IDE (не X). Посмотрите, возможно такая же настройка есть и у вас.
Честно говоря не разбирался что это, попробовал включить - проект собрался, когда раньше была ошибка
Цитата:
usb_device.o: Link Error: Could not allocate section _034a154052cd39f2, size = 48 bytes, attributes = bss near
Link Error: Could not allocate data memory

появившаяся после увеличения размера буфера (4х буферов с 64 до 128 байт)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dsPIC33E проблема с массивами
СообщениеДобавлено: 08 янв 2014, 18:38 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 16 апр 2010, 19:37
Сообщения: 151
Откуда: Тамбов
Код компилируется без ошибок и предупреждений. Data memory model = large для кода из первого поста помогло. Но теперь перехожу к реальной программе, где нужен массив на 1000 элементов - там data memory model = large не помогает. В реальном проекте RAM использована только на 9% (2758 байт).

_________________
The project was compiled with 0 errors, 0 warnings


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dsPIC33E проблема с массивами
СообщениеДобавлено: 29 авг 2014, 14:08 
Только пришел

Зарегистрирован: 29 авг 2014, 14:04
Сообщения: 6
grizzly писал(а):
Код компилируется без ошибок и предупреждений. Data memory model = large для кода из первого поста помогло. Но теперь перехожу к реальной программе, где нужен массив на 1000 элементов - там data memory model = large не помогает. В реальном проекте RAM использована только на 9% (2758 байт).

а 2758 байт разве не нормально?
(int=2 байта)*1000 = 2000 байт - Ваш массив, ну и плюс остальное. и еще - пока к массиву нет обращений, оптимизатор вправе его выкинуть. попробуйте поставить volatile перед объявлением.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dsPIC33E проблема с массивами
СообщениеДобавлено: 29 авг 2014, 15:35 
Старожил
Аватара пользователя

Зарегистрирован: 11 мар 2010, 12:44
Сообщения: 1125
Откуда: Default city
А может быть вся эта херь объявляется на стеке?
если объявить что-то вроде:
Код:
if(i=0)
{
int a[1000];
}

то стеку и пиздец, ибо этот массив компилятор считает временным, и размещает в оном.

_________________
Не дай Бог увидеть нубский ЛУТ, бессмысленный и беспощадный
В МК "на порядок" - это "в два раза"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: dsPIC33E проблема с массивами
СообщениеДобавлено: 06 сен 2014, 11:41 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 16 апр 2010, 19:37
Сообщения: 151
Откуда: Тамбов
Проблема была решена. Признаюсь, что я просто биты конфигурации не правильно настроил. Что именно не так было уже не помню.

_________________
The project was compiled with 0 errors, 0 warnings


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB