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

 
 
> ИАР MSP430 не реагирует на отсутствие второго индекса при обращении к двухмерному массиву
Dog Pawlowa
сообщение May 3 2008, 15:30
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823




Прикрепленное изображение


Прикрепленное изображение

Ладно, не реагирует, но и работает неправильно.
Отличие в одной команде, причем, мне больше нравится вариант, который не работает.
Что не так?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
dxp
сообщение May 3 2008, 16:02
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Dog Pawlowa @ May 3 2008, 22:30) *

Прикрепленное изображение


Прикрепленное изображение

Ладно, не реагирует, но и работает неправильно.
Отличие в одной команде, причем, мне больше нравится вариант, который не работает.
Что не так?

В С/C++ нет двумерных массивов. То, что объявляют как:

int A[N][M];

является ни чем иным, как массивом массивов целых. Таким образом, выражение A[i] является вполне валидным и возвращает указатель на массив интов. Хотя всего кода не представлено, думается, что проблема в этом.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 3 2008, 17:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(dxp @ May 3 2008, 19:02) *
В С/C++ нет двумерных массивов. То, что объявляют как:

int A[N][M];

является ни чем иным, как массивом массивов целых. Таким образом, выражение A[i] является вполне валидным и возвращает указатель на массив интов. Хотя всего кода не представлено, думается, что проблема в этом.

Из отсутствующего кода только объявление переменной. Это текст на двух языках (большинство сообщений одинаковы).

#define na0 "Down sensor levl"
...
const char * const backup_name[BackupQty][2]=
{na0, na0, na1, na1, na2, na2, na3, na3, na4, na4, ...}

Про массивы понял, ну а что делает компилятор - непонятно, нужно подробно разбираться. Может, профи в ассемблере MSP430 подскажут.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
diper
сообщение May 3 2008, 18:08
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 94
Регистрация: 12-11-05
Из: Росиия, Нижний Новгород
Пользователь №: 10 750



"не реагирует" это что значит? компилятор не выдает ошибки? Он все правильно делает.
printf'у вообще пофигу что ему там подсунули в качестве параметров.
Код
#define na0 "Down sensor levl"
...
const char * const backup_name[BackupQty][2]=
{na0, na0, na1, na1, na2, na2, na3, na3, na4, na4, ...}
Это объявлен массив указателей и указатели проиницализированы на строки. Соотвтественно backup_name[x][y] это указатель на строку, а backup_name[x] это указатель на указатель на строку.
Второй вариант надо полагать не работает с printf, т.к. он ожидает что первый параметр это указатель на строку.
IAR, MSP430 и ассемблер здесь ни при чем.

ЗЫ:И еще есть подозрение что отключена оптимизация у компилятора.
Go to the top of the page
 
+Quote Post

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

 


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


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