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

 
 
 
Reply to this topicStart new topic
> Курьезная ошибка в стандартной программе BOARD_GetRemap от Атмеля :), В пакете для AT91SAM7S-EK
Dir
сообщение Apr 3 2011, 14:06
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



При разборе чужих полетов обнаружил курьезную ошибку в стандартной программе определения наличия ремапа (для AT91SAM7S-EK). Вот она

Код
static unsigned char BOARD_GetRemap( void )
{
    unsigned int *remap = (unsigned int *) 0;
    unsigned int *ram = (unsigned int *) AT91C_ISRAM;
    // Try to write in 0 and see if this affects the RAM
    unsigned int temp = *ram;
    *ram = temp + 1;
    if (*remap == *ram) {
        *ram = temp;
        return BOARD_RAM;
    }
    else {
        *ram = temp;
        return BOARD_FLASH;
    }
}


При определении ремапа пишут не в *remap, а в *ram. Таким образом есть существенная вероятность неправильной работы. Плата периодически вела себя странно при старте, но никак не предполагали, что именно поэтому. Проверьте, пожалуйста, ничего я не напутал? Ведь тысячи же, наверное, людей пользовались этим пакетом. Неужели крохотная програмка так и осталась до сих пор неисправленной? По крайней мере с IAR EWB 6.10 она идет в комплекте.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Apr 3 2011, 14:31
Сообщение #2


Местный
***

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



Если ремап был, то при записи в *ram это же значение появится и в *remap. Если не было, то в *remap будет содержимое ROM. Вроде всё верно.

Цитата
Плата периодически вела себя странно при старте

А у вас что, плата сама может решить стартануть ремапнутой или нет?
Go to the top of the page
 
+Quote Post
Dir
сообщение Apr 3 2011, 14:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Цитата(VladislavS @ Apr 3 2011, 16:31) *
Если ремап был, то при записи в *ram это же значение появится и в *remap. Если не было, то в *remap будет содержимое ROM. Вроде всё верно.
А у вас что, плата сама может решить стартануть ремапнутой или нет?


Я и говорю, что есть вероятность неправильной работы. Небольшая (~1/sizeof(int)), но есть. Это когда содержимое 0 ячейки флэш равна *ram+1. Плата многофункциональная и разработана давно. Она может стартовать в нескольких режимах. Программист давно уволился и даже контактов с ним не осталось. И вот терпение из-за ее периодических фокусов при старте иссякло и начался разбор полетов. Пока еще не известно насколько виновата та причина, какую я обнаружил, т.к. воскресенье и платы у меня дома нет. Даже опешил слегка и засомневался... В принципе пока непонятно почему такая вероятность так сильно сказывается
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Apr 3 2011, 15:16
Сообщение #4


Местный
***

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



Чисто теоретически, согласен. Наверное, правильнее *ram = *remap + 1;
Но практически, я не представляю как это может стать источником проблем. Вероятность намного ниже, чем 1/sizeof(int). Потому что, или это значение туда записала программа из ROM, или оно само при включении там появилось. Ни в том ни в другом случае равномерного распределения нет.
Go to the top of the page
 
+Quote Post
Dir
сообщение Apr 3 2011, 15:41
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830



Если бы это была не стандартная программа Getting Started, поставляемая с оценочными китами, я бы и писать не стал. Обычно я такие вещи беру на веру без проверки, а тут крутился-крутился и обнаружил что проблема где-то еще за пределами main, т.е. фактически не программиста, а поставщика средств разработки...

PS. А почему эта проблема оказалась такой непропорционально вероятной и завязана на танцы с бубнами тоже кажется начинаю понимать... Тут уже заслуга излишней (ИМХО) "виртуозности" программиста... Но это не по теме.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:02
Рейтинг@Mail.ru


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