| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Как да направя биос? http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=16797 |
Страница 1 от 1 |
| Автор: | Н'бабане Гт'муан'га [ Съб Окт 05, 2019 11:49 am ] |
| Заглавие: | Как да направя биос? |
Значи занимавам се с моя 8-битов компютър. Вече съм на привършване със системния му софтуер обаче само едно нещо ме мъчи от няколко дена и не мога да го измисля. Искам да направя така че външни програми да могат да се възползват от функциите дето са във флаша. Примерно функциите за работа с паметта или пък за файловата система. Очевидно винаги мога да ги викам по адрес обаче не е сигурно че ще са на същия адрес в бъдеще при нова версия на фърмуера. Рапър функция също е не е възможно понеже са много и най-различни. Някакви други идеи да подхвърлите? |
|
| Автор: | ps66 [ Съб Окт 05, 2019 12:12 pm ] |
| Заглавие: | Re: Как да направя биос? |
jump func1 jump func2 jump func3 ... |
|
| Автор: | TheWizard [ Съб Окт 05, 2019 12:17 pm ] |
| Заглавие: | Re: Как да направя биос? |
Външните програми какво са нови узер апликации? как се компилират има ли flash ресурс |
|
| Автор: | palavrov [ Съб Окт 05, 2019 12:37 pm ] | |||||||||
| Заглавие: | Re: Как да направя биос? | |||||||||
Ако процесорът има инструкции за прекъсвания можеш да ги използваш за унификация - както е примерно при х86. Ако няма тогава е вариант както по горе ПС66 е написал на фиксирани адреси да имаш едни jmp таблици или пък направо адреси с които да унифицираш системната функционалност. Трети вариант е да имаш само една входна точка и да предаваш в някой регисър коя точно системна функция искаш да се изпълни + необходимите и параметри в други регистри. Четвърти вариант за да се спести малко код при условие, че номера на системната функция общо взето е константа да не хабиш инструкция и регистър за него ами да го вкараш в кода непосредствено след съответният int/call и да си се взима от там пък адреса за връщане да се модифицира така за да го прескочи, абе като, че ли малко код ще е по ясен:
Та това безумие, ще спести някой друг байт но прави много тегаво интегрирането със C/C++ компилатор - но все пак е доста често срещан подход при 8 битови ОС |
||||||||||
| Автор: | Н'бабане Гт'муан'га [ Съб Окт 05, 2019 2:30 pm ] |
| Заглавие: | Re: Как да направя биос? |
Мда... супер. Това с таблицата ще се окаже решение. Мерси! |
|
| Автор: | TheWizard [ Съб Окт 05, 2019 2:37 pm ] | ||||||||||||||||||
| Заглавие: | Re: Как да направя биос? | ||||||||||||||||||
firmware независимо апи baremetal CORE SIDE
USER SIDE
|
|||||||||||||||||||
| Автор: | palavrov [ Съб Окт 05, 2019 6:51 pm ] |
| Заглавие: | Re: Как да направя биос? |
Да не забравиш да сложиш някъде версия на АПИ-то за да може за в бъдеще да има някаква защита ако се пуска програма на стар БИОС който не поддържа необходимата функционалност. |
|
| Автор: | Реконструктор [ Вто Окт 15, 2019 5:41 pm ] | ||||||||||||||||||
| Заглавие: | Re: Как да направя биос? | ||||||||||||||||||
Правиш 1 ф-я с константен адрес, който не променяш никога. Ф-я от вида:
пример:
|
|||||||||||||||||||
| Автор: | Н'бабане Гт'муан'га [ Пон Окт 21, 2019 4:44 pm ] |
| Заглавие: | Re: Как да направя биос? |
Дааа... това се оказа интересен проблем. Значи таблицата с входни точки на всички функции и важни променливи ми е в рома на фърмуера. Сега искам да напиша едно "Ollo World!" и за целта трябва да я импортна в юзърската ми програма. Хедър файла съм го подготвил, обаче тук възникна интересния проблем - как да обявя функциите така че адресите им да са според таблицата?? XC8 има параметър __at(address), обаче това ще насочи функцията към съответния адрес в таблицата, а всъщност там е нейния адрес. Демек на мен ми трябва __at(__at(address)) обаче това не минава за съжаление... Някакви идеи/предложения? (по възможност без да правя таблица в рама) |
|
| Автор: | ps66 [ Пон Окт 21, 2019 5:52 pm ] | |||||||||
| Заглавие: | Re: Как да направя биос? | |||||||||
ако беше го направил, както ти показах - нямаше да имаш проблем (jump adr1, вместо само адр1) |
||||||||||
| Автор: | Н'бабане Гт'муан'га [ Пон Окт 21, 2019 6:24 pm ] | |||||||||
| Заглавие: | Re: Как да направя биос? | |||||||||
Не ми пречи да го променя в рома... Аз да си призная чак сега се усетих какво си имал предвид |
||||||||||
| Автор: | palavrov [ Пон Окт 21, 2019 11:27 pm ] | |||||||||
| Заглавие: | Re: Как да направя биос? | |||||||||
Това което ти трябва е да извикаш функция през указател - което може и да не е особенно ефективно като асемблерски инструкции според архитектурата, та затова виж дизасм и променяй докато не започне да те кефи резултата. Съвсем примерен вариант, без претенции за коректност и дали въобще ще се компилира:
|
||||||||||
| Автор: | Н'бабане Гт'муан'га [ Вто Окт 22, 2019 12:32 pm ] | ||||||||||||||||||
| Заглавие: | Re: Как да направя биос? | ||||||||||||||||||
Това е супер идея! Ще го пробвам. Малко ме притеснява дали така ще минат и системните променливи, но ще пробвам... |
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|