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

 
 
> Вопрос по выравниванию адресов, Возможно ли решить???
Paramon
сообщение Aug 1 2007, 11:17
Сообщение #1


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

Группа: Участник
Сообщений: 128
Регистрация: 5-10-06
Пользователь №: 20 997



Столкнулся с проблемой:
При параметре addrw не кратном 4
при выполнении test = *addrw;
вываливаюсь по адресу 0x00000010

Код
//======код во флеш:
OS_TID TASK8;
unsigned int adres;
......
void    task1(unsigned int addr) __task
    {    
        unsigned int addr0;
        unsigned short test;
        unsigned int * addrw;
        for(;;)
            {
            addr0 = 0;
            while(addr0 < 7)
                {
                    addrw = addr+(addr0*4);
                    test = *addrw;
                    test++;
                    *addrw = test;
                    addr0++;
                };
            };
    }
.......
void    sys_swi_8(unsigned int adr) __swi(8)    //
    {
        adres = adr;
        TASK8 = os_tsk_create_ex(task1,2,adres);
    }
........
//======================




//======= Код загруженный в озу
unsigned short buf_swi[32];

.....
sys_swi_8(&buf_swi);
.....

//========================


Есть ли какая-нибудь возможность при внешнем вызове __SWI /имеется ввиду вызов __SWI, расположенного во флеш из загруженного в ОЗУ модуля, где процедура от SWI обращалась к данным вызвавшего модуля без выравнивания адресов(параметром обмена является только адрес
данных)/?
(Или придётся делать процедуру чтения/записи невыровненых данных?)
Как обьявить выровненый массив не знаю(надо для загружаемого в озу кода).
Хотелось бы иметь не только INT
Примечание: код для флеш и для озу компилируются отдельно
Загрузка в озу из SD/MMC


Спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kirill Frolov
сообщение Aug 6 2007, 23:06
Сообщение #2


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

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(Paramon @ Aug 1 2007, 15:17) *
(Или придётся делать процедуру чтения/записи невыровненых данных?)


Придётся... Для многих отличных от x86 и невосьмибитных архитектур.

Цитата
Как обьявить выровненый массив не знаю(надо для загружаемого в озу кода).


Если не играться хакерством с насильственным привидением типов, то всё изначально как надо выравнено, а то иначе ж работать просто не будет.


Цитата(Paramon @ Aug 6 2007, 09:50) *
возможно ли как-то заставить компилить с переходами относительно значения PC???


См. info gcc на тему -fPIC. Подробностей относительно возможности применения в эхотаге -- не знаю..


--------------------
[ZX]
Go to the top of the page
 
+Quote Post



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

 


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


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