|
Виж темите без отговор | Виж активните теми
Дата и час: Пет Авг 21, 2026 10:38 pm
Заменям финансова срещу програмна помощ (ARM Cortex CM3)
| Автор |
Съобщение |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
 Заменям финансова срещу програмна помощ (ARM Cortex CM3)
Значи ако има някой дето е много навътре с CM3 и има желанието да ми помогне. Имам следния код:
 |  |  |  | Код: void SysCall(void) { LED^=1; // for the test...
__asm("thread_exit:"); __asm("SVC 0"); // return to handler mode }
void SysTick_Handler(void) __attribute__ ((naked)); void SysTick_Handler(void) { __asm("PUSH {r4,lr}"); // preserve EXC_RETURN (and SP align) __asm("LDR r0,=thread_exit"); // thread LR must generate an exit __asm("LDR r1,=SysCall"); // thread PC is our real handler __asm("LDR r2,=0x01000000"); // PSR for thread in Thumb-state __asm("PUSH {r0-r2}"); // create LR, PC and PSR __asm("SUB sp,sp,#(5*4)"); // allocate space for r0-r3 and r12 __asm("LDR r0,=0xFFFFFFF9"); // thread using MSP return __asm("BX r0"); // return to newly created thread }
void SVC_Handler(void) __attribute__ ((naked)); void SVC_Handler(void) { __asm("ADD sp,sp,#(9*4)"); // remove thread and r4 from stack __asm("POP {pc}"); // perform standard exception return }
|  |  |  |  |
Тоя код е за Rowley и конкретното дърво е LPC1768.
Целта ми е се изразява просто като желание да имам SysTick който да може да се извиква в прекъсване дори и ако в момента е било извикано (reentrant interrupt). В момента ми бичи HardFault на POP {PC}.
Аз не съм специалист на армовете нито пък възнамерявам да ставам някога обаче имам един клиент дето много държи ТОЧНО на CM3 без дори да знае точно защо (да му .... и интернета...  ), така че трябва да се справям някак си с тая тъпота.
А, още нещо дребно - моля ви спестете си коментари от сорта "ми що не го направиш без реентрант интеръпт?" или "аз сега да те светна по въпроса" и т.н. Ако някой може и има желание да ми помогне нека се обади, другите - просто игнорирайте това.
Проблемът ми изисква спешна намеса.
Мерси!
|
| Пет Мар 18, 2011 6:34 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11278 Местоположение: Добрич
|
 Re: Заменям финансова срещу програмна помощ (ARM Cortex CM3)
Не е толкова просто... В смисъл буквално е невъзможно. Това което в АРМ форума те посъветваха е да го "излъжеш", че е реентрант... То няма друг вариант, тъй като има хардуерен стек за прекъсванията и там няма как да пъхнеш два пъти едно и също (или по-ниско по приоритет) прекъсване.
Та заобикалянето е като маскираш прекъсването като отработено, а същинската обработка я оставиш за "после" в нормален режим (не в хендлър mode).. Доколкото ви следях дискусията вие задълбахте в смяната на стековете, а аз си замълчах....
Замълчах си щото не мога да ти дам решение, без да имам яснота как изглежда останалата част от кода ти. Това което се опитваш да направиш е равносилен на малък кърнел - пускаш де-факто динамични нишки в стековете... Ако много държиш през почивните дни ще ти направя код за това, днес няма да мога да ти обърна никакво внимание.
Но дебело ти подчертавам, че си тръгнал по един не особено добър начин да си решаваш проблемите... Не знам какви са ти проблемите, но повярвай ми това не е добър подход...
|
| Пет Мар 18, 2011 10:37 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Ех Миро, Миро... Не можа да се стърпиш...
Много е дълго да ти обяснявам конкретните причини защо имам нужда от това. Най-общо казано е продукт за който преди няколко години бях писал софта и бачкаше на арм7 (сега да не вземеш да си мислиш че съм страшен почитател на арм7) и бачка прекрасно, сега трябва да го прехвърля на новия "много модерен" (хахаха) куртекс.
Та ако ти се намира време и желание заповядай пък аз ще се разплатя за усилието както мога.
Колкото до армския форум - потвърди ми се още едно подозрение - какъвто им продукта, такъв им и съпорта...
Но едно знам със сигурност - мога да се хвана на бас че куртекса няма да оцелее и 5 години. Твърде е болна горката платформа колкото и да се опитват да я хвалят армаджиите. Нещо като 286-цата на 21 век

|
| Пет Мар 18, 2011 11:48 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Каса бира, немска (че е неутрално географски)  ? В смисъл не само, че ще оцелее ами и ще доминира в бъдеще. Не M3 конкретно, щото то просто ще остарее морално за 5 години, но нещо от тая концепция М4-М5 или нещо от сорта.
То всъщност и 286 оцеля. Тоест се прероди в 386, 486 и т.н. Така че като се замисля прав си. М3 може и да не оцелее, ама то няма контролер в днешно време дето да седи 5 години на върха без еволюция. Т.е. няма да оцелее, а ще еволюира. То М4 вече тръгна официално.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Мар 18, 2011 11:52 am |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Каса немска, имаш я като си дойда до бг, че 2016 (да сме живи и здрави дотогава) няма да има не само м3 ами м-каквото и да е. Сега пиша от пада и не мога да пиша много ама ако седна да му изреждам куцините дето аз съвсем отгоре ги видях бая писане ще ми е...
А от 286до 386... Ако с толкова се подобри арм ще се доближи плътно до 8051 (следващата най-куца) платформа 
|
| Пет Мар 18, 2011 12:19 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
Стихиите, които сполетяха Австралия са ти размътили разсъдъка май!  Искаш да кажеш, че до 5 години Cypress ще се самозатрие?! 
|
| Пет Мар 18, 2011 12:43 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Не знам за какви стихии ми говориш аз тука нищо не съм видял. Май журналистите в България масово изкарват премии. А cypress нищо чудно да се самозатрие с тая грешна стратегия напоследък 
|
| Пет Мар 18, 2011 12:58 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Ами куца платформа е относително понятие, като имаш предвид че е най-разпространения като база контролер къде 10тина години вече. Включително и днес продължават да излизат платформи базирани на 8051. Ако М -ките на кортекс стигнат това постижение, ще е безспорен успех, а те имат всички изгледи да го направят.
На практика няма пройзводител (изключвам Микрочип) който да не залага Кортекс платформа. Включително и твойте фаворити от Cypress.
Всъщност аз не мога да те разбера - ти си отявлен фен на песовете, а не харесваш Куртекс и 8051, които са двете ядра заложени в тези чипове
Да разбирам ли, че ги ползваш.... с отвращение, както беше казал един виден наш политик 
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пет Мар 18, 2011 1:05 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Аз ползвам M8 от техните. кортекс не ми влиза дори и в най-далечните планове за продукти освен ако не се налага без алтернатива в което се съмнявам. Наречи го личен каприз ако искаш, за мен е все едно.
Ама пак се случи това от което се страхувах - цялата тема стана една чесачка на езици
Май майкрочип ще се окажат моите хора в крайна сметка...
|
| Пет Мар 18, 2011 1:17 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11278 Местоположение: Добрич
|
Не ме интересува какъв е продукта ти, а как е организиран... Очевадно нямаш RTOS - за това мога да се досетя, но иначе имаш main loop предполагам и набор от прекъсвания, като едно от тях по някаква причина искаш да е реентрант?
Самата причини също не ме интересува, макар че според мен какъвто и да ти е проблемът, едва ли най-доброто му решение е чрез реентрване... Казвам ти го щото 1) съм убеден че има и друго решение и 2) реентването най-вероятно ще ти създаде още проблеми и после ще се наложи да правим кръпки върху кръпката... Но ако все пак си решил да е така, трябва да си сигурен, че това прекъсване няма да идва много по-често, отколкото можеш да го обработваш. Иначе стека ти ще почне да се топи като краве масло във фурна...
Освен това искам да знам има ли някаква вид комуникация между обработката на това прекъсване и останалата част от кода ти.
Премести темата, да не е тук в пазара щото не й е тук мястото и утре ако друг не ме изпревари ще ти драсна код да тестваш...
|
| Пет Мар 18, 2011 1:54 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Миро, спести ми моля те напътствията. Знам много добре какво правя, просто ми е нужна помощ в техническите детайли за конкретния случай.
Комуникацията с другата част на кода аз ще си я направя както ми трябва, единственото от което се нуждая е хендлъра на SysTick да е реентрант. Това е. Ако драснеш код с удоволствие ще го пробвам в понеделник.
|
| Пет Мар 18, 2011 2:58 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
kiiid, сори за офтопика, ама няма защо да се оплакваш на къде тръгнала темата, защото ти самия я тласкаш в тая посока, като ръсиш някакви квалификации коя платформа какво била и т.н. Като искаш да няма спам питаш кратко и ясно, без да се правиш на интересен да раздаваш квалификации, още повече след като и сам не можеш да се справиш, т.е. ясно е, че нещата не са ти съвсем ясни  . Още един път сори за лиричното отклонение  .
|
| Пет Мар 18, 2011 3:49 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11278 Местоположение: Добрич
|
Dimitar,
аз съм виновен, ама просто ми е трудно да се сдържа
kiiid:
дай повече инфо за приоритетите... В смисъл единия вариант е Systick да е възможно най-ниския приоритет в системата. Тогава просто излиза от хендлър моде и директно в обслужващата нишка...
Ако обаче не е най-нисък обслужването може да става по два начина:
1) с приотитета на този, който сме прекъснали
2) с най-нисък приоритет
Има и трети вариант - ако ползваш pending service, който да е с едно ниво под Systick. Тогава като дойде твоето прекъсване, задейства пендинга. Може и да инкрементира един броя с exclusive операции (за да не се изтърват тикове). И след това излиза, но ще влезе в пендинг веднага без ти нищо да правиш. Всъщност ако не правиш нищо няма да е баш реентрант....
Както и да е. значи в третия вариант ми трябва Pending-а за да имам ясен приоритет на обслужването. А вече дали обслужването да е реентрант ти ще кажеш (може да се направи, макар че по принцип никой не го прави така)...
|
| Пет Мар 18, 2011 5:24 pm |
|
 |
|
kiiid
Ранг: Почетен член
Регистриран на: Съб Сеп 24, 2005 2:00 pm Мнения: 787
|
Димитре, къде видя дори зачатък на офтопик в началния ми пост? Аз дори изрично помолих да се въздържаме от излишни спорове. Ама някои не се въздържаха  То и аз съм виновен де, че никога не мога да се стърпя да не кажа ако виждам нещо да е не както трябва, ама не ми беше идеята това в тоя пост.
Миро, ако SysTick е с най-нисък приоритет ме устройва напълно въпреки че и другите варианти биха били ок. По принцип и в моя стар код реентрант частта беше с най-нисък приоритет.
|
| Съб Мар 19, 2011 1:34 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11278 Местоположение: Добрич
|
Ако гарантираш тик-а да е с най-нисък приоритет твоя код си е ОК май... Имаш една дребна подробност - там, където зареждаш адресите, трябва да добавяш 1-ца. т.е.:
|
| Съб Мар 19, 2011 11:43 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 8 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|