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

 
 
> 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
 
Start new topic
Ответов
Дмитрий К.
сообщение May 18 2012, 10:55
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #3



***

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 23:04
Рейтинг@Mail.ru


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