nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 29 Apr 2024 10:52



Reply to topic  [ 16 posts ]  Go to page 1, 2  Next
Си для МК 
Author Message
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Приятно был удивлен что Си делает такое:

Code:
#define F (*(void(*)(int,int,int)) 0x10000)
F(1,2,3);


тоесть вызывается функция с тремя параметрами, возвращающая ничего по адресу 0x10000

а как сделать переход на си по определённому адресу? :wink:


15 Apr 2007 19:06
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Приятно был удивлен что Си делает такое:

Code:
#define F (*(void(*)(int,int,int)) 0x10000)
F(1,2,3);


тоесть вызывается функция с тремя параметрами, возвращающая ничего по адресу 0x10000

а как сделать переход на си по определённому адресу? :wink:


Тебя интересует 16-битный или 32-битный режим? Если речь идёт о ваткомовской флат-модели, то тебе надо перейти внутри 4-гигабайтного сегмента программы или наружу? Наружу сильно сложнее как я понимаю, но в крайнем случае можно на встроенном асме что-то воткнуть...

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2007 19:12
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
Тебя интересует 16-битный или 32-битный режим? Если речь идёт о ваткомовской флат-модели, то тебе надо перейти внутри 4-гигабайтного сегмента программы или наружу? Наружу сильно сложнее как я понимаю, но в крайнем случае можно на встроенном асме что-то воткнуть...

Нет, тут речь идёт о физическом адресе:) Как на сях организовать переход? (без асм-вставок)


15 Apr 2007 20:07
Profile
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Ну допустим мне надо осуществить переход внутри сегмента 4Гб


15 Apr 2007 23:17
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Ну допустим мне надо осуществить переход внутри сегмента 4Гб


Хм, в ваткоме goto требует только имя и такая метка может быть только в пределах видимости... А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2007 06:17
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?

Для написания загрузчиков в контроллерах!
Известен начальный адрес загрузчика, адрес приложения выбирается.
Загрузчик должен с UART'а считать код и записать его в память микроллера. И передать коду управление. Поставщик кода - Вин32 прога :)
У меня пока всё работает с вызовом функции кода, в идеале нужен переход на фрагмент кода - тоесть возврата не будет(да и стек экономится ;)


16 Apr 2007 18:28
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Shaos wrote:
А зачем тебе такие проивзольные переходы? Допустим в микроконтроллерах их можно себе представить, а в PC зачем?

Для написания загрузчиков в контроллерах!
Известен начальный адрес загрузчика, адрес приложения выбирается.
Загрузчик должен с UART'а считать код и записать его в память микроллера. И передать коду управление. Поставщик кода - Вин32 прога :)
У меня пока всё работает с вызовом функции кода, в идеале нужен переход на фрагмент кода - тоесть возврата не будет(да и стек экономится ;)


Ну вызови функцию и не делай return - делов то ;)

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2007 18:40
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
Ну вызови функцию и не делай return - делов то ;)

при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!


16 Apr 2007 18:44
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Shaos wrote:
Ну вызови функцию и не делай return - делов то ;)

при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!


Если у тебя PC, то 4 байта - фигня

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2007 19:22
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
Если у тебя PC, то 4 байта - фигня

Либо я хреново объясняю, либо меня читают невнимательно ;)
Ну конечно же такие трюки мне восстребованы в контроллере!!!


16 Apr 2007 22:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Shaos wrote:
Если у тебя PC, то 4 байта - фигня

Либо я хреново объясняю, либо меня читают невнимательно ;)
Ну конечно же такие трюки мне восстребованы в контроллере!!!


Тогда при чём здесь C для DOS (см. название темы)? ;)

В Си для контроллера должна быть возможность задавать непостредственно адрес

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2007 05:17
Profile WWW
Banned

Joined: 12 Oct 2006 16:44
Posts: 608
Reply with quote
Post 
Shaos wrote:
Тогда при чём здесь C для DOS (см. название темы)? ;)

ну не заводить же тему "Си для МК" :)
Форум и так пухнет от избытка тем, поэтому и загружается плохо


17 Apr 2007 15:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22626
Location: Silicon Valley
Reply with quote
Post 
Romanich wrote:
Shaos wrote:
Тогда при чём здесь C для DOS (см. название темы)? ;)

ну не заводить же тему "Си для МК" :)
Форум и так пухнет от избытка тем, поэтому и загружается плохо


А почему бы и не завести? ;)

У меня всё грузится быстро

_________________
:dj: https://mastodon.social/@Shaos


17 Apr 2007 16:52
Profile WWW
Senior

Joined: 07 Aug 2006 10:18
Posts: 185
Reply with quote
Post 
Romanich wrote:
а как сделать переход на си по определённому адресу? :wink:

читай внимательно документацию на компилятор. в стандарте, по-моему, такого нету. а вот в компиляторе -- может и есть. по-крайней мере, gcc умеет адреса меток в указатели складывать, и наверное это значит, что можно адрес в goto использовать.


08 Aug 2007 21:45
Profile
Doomed

Joined: 16 Apr 2005 22:35
Posts: 492
Location: Томск
Reply with quote
Post 
Romanich wrote:
Shaos wrote:
Ну вызови функцию и не делай return - делов то ;)

при вызове функции без праметров в стек заносится адрес возврата. Меня жаба давит, что стек незначительно, но расходуется. Даже если перетру его настройкой сегментов - грязно это!


Берёшь gcc (avr-gcc или arm-elf-gcc).

1. Как на С перейти по произвольному адресу :

((void (*)())(0x1000))(); - переходит по адресу 0x1000.

2. Насчёт стека
void dummy() __attribute__ ((naked));
void dummy()
{
/* тело процедуры */
}

Атрибут naked говорит компилятору, что процедура "голая", то есть при входе в неё НИЧЕГО на стек не кладётся, а при возврате - не берётся...


20 Aug 2007 22:40
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 16 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 45 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.