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

 
 
 
Reply to this topicStart new topic
> IAR MSP430 Внутренняя ошибка компилятора?, Компилируется в некорректные коды
Дмитрий К.
сообщение May 17 2012, 08:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848



В довольно сложной программе (полностью на С) столкнулся с тем, что контроллер перезагружался.
Нашел команду, которая несколько некорректно скомпилировалась, упростил проект до одной команды на ассемблере. (MOVX.W...)
На картинке видно, что команда MOVX... начинается с 0xFFF, а должна с 0x4XXX:

Кто нибудь может подсказать.

Контроллер MSP430F2416
Embedded Workbench 5.4
Версия IAR C/C++ Compiler for MSP430 4.21.2
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
KykyryzzZ
сообщение May 17 2012, 09:22
Сообщение #2



***

Группа: Свой
Сообщений: 404
Регистрация: 20-10-05
Пользователь №: 9 885



Какие варнинги вылетают при компиляции?
Go to the top of the page
 
+Quote Post
Дмитрий К.
сообщение May 18 2012, 05:27
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848



QUOTE (KykyryzzZ @ May 17 2012, 13:22) *
Какие варнинги вылетают при компиляции?

Совсем никаких, оптимизация отключена.
Причем если смещение уменьшить, то все нормально:
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
KykyryzzZ
сообщение May 18 2012, 06:24
Сообщение #4



***

Группа: Свой
Сообщений: 404
Регистрация: 20-10-05
Пользователь №: 9 885



Цитата(Дмитрий К. @ May 18 2012, 09:27) *
Совсем никаких, оптимизация отключена.
Причем если смещение уменьшить, то все нормально:

Для начала я бы посоветовал выяснить, в какой момент программа начинает сваливаться (т.е. точное значение этого пресловутого смещения при котором еще работает и при котором уже нет)
Go to the top of the page
 
+Quote Post
Дмитрий К.
сообщение May 18 2012, 10:55
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848



Так происходит когда смещение меньше 0.
Вот где это получается:

CODE
#include "io430.h"
float float_1;
float float_2;

typedef struct
{        
    short data[1000];  
    float coefficient[40];
} My_struct;

My_struct sA;
unsigned char channel;
float float_tmp[4];

int main( void )
{    
    channel = 0;
    sA.coefficient[channel + 10] = float_tmp[0];    // <<<<<<<<
    while(1);
}


где sA.coefficient[channel + 10] = float_tmp[0];
в ассемблере выглядит так:

\ 000006 ....5E42.... MOVX.B &channel, R14
\ 00000C 4E4E MOV.B R14, R14
\ 00000E 3E500A00 ADD.W #0xa, R14
\ 000012 3EE00080 XOR.W #0x8000, R14
\ 000016 4E06 RLAM.A #0x2, R14
\ 000018 ....9E42.... MOVX.W &float_tmp, sA - 129072(R14)
\ ....
\ 000020 ....9E42.... MOVX.W &float_tmp + 2, sA - 129070(R14)
\ ....
Явно "sA - 129072(R14)" выглядит странновато.
И это только при настройке в IAR Data model=Large, при котором можно использовать более 64k ram.
Go to the top of the page
 
+Quote Post
KykyryzzZ
сообщение May 19 2012, 08:38
Сообщение #6



***

Группа: Свой
Сообщений: 404
Регистрация: 20-10-05
Пользователь №: 9 885



Цитата(Дмитрий К. @ May 18 2012, 13:55) *
Так происходит когда смещение меньше 0.
....
И это только при настройке в IAR Data model=Large, при котором можно использовать более 64k ram.


У MSP430F2416 объем RAM 4Кбайта... От куда взялись 64К?
Советую посмотреть при отладке, не возникает ли переполнения стека?

Ради интереса посмотрел код. Результат в аттаче.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Дмитрий К.
сообщение May 21 2012, 11:18
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848



QUOTE (KykyryzzZ @ May 19 2012, 12:38) *
У MSP430F2416 объем RAM 4Кбайта... От куда взялись 64К?

Да, я ошибся, я имел ввиду flash (я использую MSP430F2418 с 116k flash).
А не подскажите какой версии у Вас компилятор.
Я написал в техподдержку iar'a, ответили попробуйте более новую версию (4.21.9), как бы в ней исправлены какие то баги с генерацией кода. Пока еще не попробовал.
Go to the top of the page
 
+Quote Post
KykyryzzZ
сообщение May 21 2012, 11:57
Сообщение #8



***

Группа: Свой
Сообщений: 404
Регистрация: 20-10-05
Пользователь №: 9 885



Относительно старенький. IAR Embedded Workbench IDE 5.3. IAR C/C++ Compiler for MSP430 V4.10.

Непонятно только, почему один и тот же код по разному компилируется...
Go to the top of the page
 
+Quote Post
Дмитрий К.
сообщение May 23 2012, 08:06
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 6-05-06
Из: Москва
Пользователь №: 16 848



Попробовал на IAR C/C++ Compiler for MSP430 V4.11 и 5.40.1,
на обоих нормально, перешел на более новый.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 19:50
Рейтинг@Mail.ru


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