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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> IAP неполучаеццо :(, влетает в эксепршены
klen
сообщение Aug 20 2007, 15:27
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Дошли руки до IAP, прочитал мануал, написал код - сначала не работало, потом заработало, чето потрогал руками опять перестало работать. Пока тренируюсь на вызове запроса partID. стопрацентный заход в PAbort или DAbort, в эксепшене lr коворит адрес 0x7ffffff8, прерывания отключены, вызов иапа сразу в начале main.


код вызова:
Код
#include "iap.h"

#define IAP_LOCATION 0x7ffffff1

unsigned int command[5];
unsigned int result[2];

#define PrepareSectors4Write 50
#define RAM2Flash            51
#define EraseSectors         52
#define BlankCheckSectors    53
#define ReadPartID           54
#define ReadBootCodeVersion  55
#define Compare              56
#define ReinvokeISP          57


#define CMD_SUCCESS         0      //  Command is executed successfully.
#define INVALID_COMMAND     1      //  Invalid command.
#define SRC_ADDR_ERROR      2      //  Source address is not on a word boundary.
#define DST_ADDR_ERROR      3      //  Destination address is not on a correct boundary.
#define SRC_ADDR_NOT_MAPPED 4      //  Source address is not mapped in the memory map.
#define DST_ADDR_NOT_MAPPED 5      //  Destination address is not mapped in the memory
#define COUNT_ERROR         6      //  Byte count is not multiple of 4 or is not a permitted value.
#define INVALID_SECTOR      7      //  Sector number is invalid.
#define SECTOR_NOT_BLANK    8      //  Sector is not blank.
#define SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION 9 //Command to prepare sector for write operation was not executed.
#define COMPARE_ERROR       10     //  Source and destination data is not same.
#define BUSY                11  


typedef void (*IAP)(unsigned int*,unsigned int* );
IAP iap_entry =(IAP) IAP_LOCATION;

void GetPartID ( unsigned int* pid  )
{
   command[0] = ReadPartID;
   result[0]=-1;
   result[1]=-1;
   iap_entry (command, result);
  
   *pid = result[1];
}


Че я нетак делаю?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2007, 15:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(klen @ Aug 20 2007, 18:27) *
Че я нетак делаю?

smile.gif
Начни с начала мануала!
Рабочий огрызочек в приложении.
Прикрепленные файлы
Прикрепленный файл  IAP_sample.rar ( 916 байт ) Кол-во скачиваний: 140
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 20 2007, 17:01
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(zltigo @ Aug 20 2007, 19:51) *
Начни с начала мануала!


Что мне подсказывало что нада МАМ выключить... и даже PLL..

в тестовом примерчике заработало, буду пробыать вкрутить в проект и сделать прошивания по usb.
большое спасибо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2007, 17:10
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(klen @ Aug 20 2007, 20:01) *
Что мне подсказывало что нада МАМ выключить... и даже PLL..

Это только для ~3 летней давности bootloader-ов было актуально - потом поправили.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2007, 17:13
Сообщение #5


.
******

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



Код
((void( __thumb __interwork *)( ulong *, ulong *))IAP_LOCATION)( (ulong *)iaps, ((ulong*)iaps) + 5 );
Какой изврат smile.gif
Мало кто способен осмыслить такое smile.gif
Кстати, __thumb выкинуть на помойку smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2007, 17:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2007, 20:13) *
Какой изврат smile.gif

Зато точно любой компилятор поймет smile.gif
Ну по осмыслению - пишется легко и непринужденно:


1. 0 Берем, например, 0
2. ()0 Будем явно тип преобразовывать
3. (*)0 В указатель
4, ((*)())0 .................. на функцию
5. ((*)(void))0 ........................................без параметров
6. (void(*)(void))0 ничего не возвращающую
7. Ну и вызываем это ((void(*)(void))0)();
При необходимости добавляем параметры и возвращаемые значеня по месту - это совсем легко.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2007, 17:42
Сообщение #7


.
******

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



Ну я серьёзно! Пишите уж так:
Код
((void( __interwork *)( void *, void *))IAP_LOCATION)( iaps, &iaps->status );

Тоже поймёт любой компилятор и с любыми настройками проекта

Сообщение отредактировал GetSmart - Aug 20 2007, 17:46


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2007, 18:02
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2007, 20:42) *
Ну я серьёзно! Пишите уж так:

Без +5, естественно красивее, ну а на void * менять не стоит. Я просто за 30 секунд писал не перечитывая года три назад именно в последовательности, как изложил в предыдущем посте smile.gif когда структуру ЕЩЕ НЕ описал.
Цитата
Тоже поймёт любой компилятор и с любыми настройками проекта

Естественно, поскольку никаких принципиальных отличий в описании просто нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 20 2007, 18:24
Сообщение #9


.
******

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



Цитата(zltigo)
ну а на void * менять не стоит
Это ещё паччему? Когда в Вашем вызове делается преобразование типов, то контроль типа по-любому теряется. Поэтому - можно, и ещё раз - можно.
Цитата
...поскольку никаких принципиальных отличий в описании просто нет.
Как нет? Я ж написал, что __thumb лишний!?!


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 20 2007, 18:30
Сообщение #10


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата
Ну я серьёзно! Пишите уж так:
((void( __interwork *)( void *, void *))IAP_LOCATION)( iaps, &iaps->status );

Тоже поймёт любой компилятор и с любыми настройками проекта

конечно любой.. если задефайнить
#define __interwork


дело было не в бобине....
я оказывается неправильный адрес передавал обработчику iap sad.gif
сам дурак.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2007, 19:10
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 20 2007, 21:24) *
Поэтому - можно, и ещё раз - можно.

"Можно" многое что, а "нужно" и "правильно" без явных и тем более через void проеобразований типов
(откуда у меня преобразования типов остались smile.gif - объяснял )
Код
    ((void( __thumb __interwork *)( struct s_iap *, ulong *))IAP_LOCATION)( iaps, &iaps->status );

Все smile.gif отлито в бронзе, рукам не трогать smile.gif
Цитата
Как нет? Я ж написал, что __thumb лишний!?!

Допустимый.
Цитата
Description
The __thumb keyword makes a function execute in Thumb mode. Unless the function is also declared __interwork, the function declared __thumb can only be called from functions that also execute in Thumb mode.


Более того по IARу
Цитата
__interwork
Syntax
Follows the generic syntax rules for type attributes that can be used on functions, see Type attributes.

Description
A function declared __interwork can be called from functions executing in either ARM or Thumb mode.

Example
typedef void (__thumb __interwork *IntHandler)(void);


Или __interwork лишняя 'напоминалка', Ну и что? Скобок можно еще лишних напихать, но сути это не изменит.

Сообщение отредактировал zltigo - Aug 20 2007, 20:45


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Aug 21 2007, 08:03
Сообщение #12


.
******

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



Объясняю на пальцах.
Атрибут __interwork задаёт вызов функции в универсальном формате (из любого режима в любой режим). На компиляцию процедуры не влияет.
Атрибут __thumb задаёт компиляцию функции в thumb формате кода. Но без __interwork её невозможно вызвать из ARM режима.

Итог:
Так как в данном случае нет никакой компиляции, а есть только указание о вызове процедуры, то __thumb тут ни к селу, ни к городу.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 21 2007, 08:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(GetSmart @ Aug 21 2007, 11:03) *
Объясняю на пальцах.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
klen
сообщение Aug 22 2007, 08:48
Сообщение #14


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



.... бедные несчастные пользователи компиллера IAR...
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Aug 24 2007, 08:30
Сообщение #15


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(klen @ Aug 22 2007, 12:48) *
.... бедные несчастные пользователи компиллера IAR...


Ну вы блин даете оба... smile3009.gif
Компилятор не нравится... В общую философию кинулись...

Разве тут нужны религиозные войны а-ля кто кого сборет, если слон с китом схватится? beer.gif
Go to the top of the page
 
+Quote Post

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

 


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


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