0 1
Реба Последно редактирано на 23.11.2024 от Дон
Реба, видяно: 275 пъти. #128103
опитвам се да подкарам ей тоя контролер, чудесно изглежда - 60 стотинки за бройка, 32 битов, 48 мегахерца, 5 милиампера консумация, перфектен за хобизма ми. искам да го подкарам в "чиста среда" това значи - компилатор от команден ред, програматор от команден ред, всичко от команден ред. ама защо ама как , ама имат много хубава среда кейл - няма да го дискутирам това, разбирачите им е ясно, а само те имат значение. та ето какво се случва - подкарах компилатор гцц, програматор edbg (с дописване, оригинално не поддържа тоя контролер), кода се записва и се чете от контролера същия какъвто е. обаче контролера не пали, окей почвам да разследвам елфа (objdump" - S disassemble test.elf > dis.asm) и какво виждат очите ми:
0000028c <Reset_Handler>:
28c: 480c ldr r0, [pc, #48] ; (2c0 <L_loop3+0x2>)
28e: 4685 mov sp, r0
290: 480c ldr r0, [pc, #48] ; (2c4 <L_loop3+0x6>)
292: 490d ldr r1, [pc, #52] ; (2c8 <L_loop3+0xa>)
294: 4a0d ldr r2, [pc, #52] ; (2cc <L_loop3+0xe>)
296: 2300 movs r3, #0
298: e002 b.n 2a0 <L_loop0_0>
до тук добре, съвпада с кода който се очаква, той върви с СДКто като асм файл startup_apm32f00x.S и просто го включвам в кюпа.
обаче ето какво седи във векторната таблица
защо мамка му е 28D като трябва да е 28C , някой удрял ли е подобна греда?
File | Size | Uploaded | Downloads | MD5 hash |
---|---|---|---|---|
image.png | 2618 bytes | 23.11.2024 | 66 | 407051539aa16f0d21b473dcd1ef1e44 |
Не е греда. В арм32 всички инструкции са 32 битови т.е. Винаги са на кратен на 4 адрес т.е. младшите 2 бита на адреса са винаги нули.
Когато се пръква това недомислие тъмб (thumb) който е 16 битов скин върху 32 битовите инструкции т.е. процесора си е пак същия но 16 битовите инструкции се конвертират до 32 битови според един флаг.
И тук е врътката. Тарикатски са решили този флаг да се контролира от най младшия бит от адреса при преход. Затова тъмб кода е на нечетен адрес. Т.е. всичко си е наред, не се шашкай.
Относно твоя проблем - клати пинове в кода за да проследиш докъде стига или не стига и после гледай с лог.анализатор.
Ако пак запънеш направо ми звънни да дам едно рамо.
Реба Създадено на 23.11.2024, видяно: 268 пъти. #128105
хаха, евалата, старото куче си е старо куче!
а тва с клатенето на пинове много бързаш, то ясно че първо това се прави, но тука изобщо не стигаме до там. сега ще пусна осцилатора да излиза навън, и това (ако се задейства) ще го ползвам за трасиране до къде изобщо стига кода - излезе ли значи сме минали през точката
Не съм убеден, че за ембедед е недомислие, още повече, когато е мислен
Реба Създадено на 23.11.2024, видяно: 263 пъти. #128107
е да хабиш 32 бита за кодиране на 50-100 инструкции си е тотално и фрапиращо разхищение при килобайтова памет
Точно де. Що не си ползваш оргиналдъ STM32, а се мъчиш с тоя китаец? Разликата в цената е нищожна, но за STM има вече изградена много обширна екосистема, всичко тръгва от раз и не го мислиш.
Реба Създадено на 23.11.2024, видяно: 255 пъти. #128118
тоя специално си е чисто техен, не е копие на стм, но и да беше все тая - както казах държа на чиста среда, никакви кейлове мейлове и "удобства".
Има по-евтини, ако гоним цена. Има по-ширпотребни, ако гоним производителност.
Нещо ми бяга идеята сефте да разработваш нова концепция. Да ти дам въдиците, ако толкоз ти е скучно у вас?
In-circuit debugging имаш ли? Емулатор?
Зависи кой какво приоритизира. За мен е по важно да има условно изпълнение на всяка инструкция - нещо което го има във всяка 32 битова инструкция но е изрязано в 16 битовия тъмб и е заменено с if-then-else инструкция която казва с 4 бита кои от следващите 4 инструкции да се изпълнят и кои не. На пръв поглед това е ОК само, че нещата се омотват ако стане прекъсване по време на изпълнение на този цикъл от няколко инструкции. Т.е. върху едната кръпка слагат втора с която запазват състоянието на тези 4 бита за да се знае до къде се е стигнало с условното изпълнението. Да не говорим, че е забранено в този момент да вложиш второ условно изпълнение - нещо което може на 32 битовите инструкции. Съответно всяка кръпка може да се сбърка и господ да ти е на помощ да дебъгваш краш на защитен от дебъгване банков пос терминал който крашва защото при превключване на нишките в кофти място изпълнява и then и else инструкциите защото нещо се е омотало при възстановяване на тези 4 бита. По добре въобще да не я бяха слагали тази if then else инструкция. ОК, скопили са елегантните 32 битови инструкции до 16 бита, ама да не го правят и бъгливо.
А който иска да има сбит код да си ползва 8 битови процесори. Тая простотия са я направили 90-те когато започват да се произвеждат масово умнофони с арм процесор който точно заради елегантния си дизайн е с изключително ниска консумация при повече от прилична производителност т.е. идеален за батерии. Да ама него време паметта беше скъпа и 32 битов флаш вдига с няколко цента цената спрямо 16 битова. 30 години по късно това не е така. Днес флаша е евтин. За чий ти е да скопяваш 32 битов процесор до 8 битов?!
Реба Последно редактирано на 23.11.2024 от Дон
Реба, видяно: 226 пъти. #128125
скопяването е ок, това че е бъгливо не е ок. освен това не е ли опционално, гледам че на компилатора се подава опция - mthumb
Принципно е добра идея за всеки професионалист да вниква в умовете на колегите си и да може да се сеща кое защо е направено. Както бе споменато, 32 бита за няколко десетки инструкции е страшно разхищение. От друга страна, хората, които са го измислили, по никой начин не са се сетили, че от пича въшка за 60 стинки някой ще иска многозадачност. И аз не бих си го помислил. По същия начин, ако измислях ЗДвП не бих могъл да предвидя, че ще има олигофрени, за които 50 км/ч е прекалено висока скорост.
Убий ме, ама посмъртно не мога да се сетя за какво му е многозадачност на един банкомат.
В ембедед света има много голям гап - за едната половина задачи е достатъчен много прост 8/16 битов проц, за другата - сериозен пауър. Почти няма приложения, които да са посредата. Това, че има умствено изостанали, които искат от много простия процесор да изпълнява задачи не от неговия свят, дали поради незнание и неумение, дали от скъперничество, не е проблем на архитектурата на простия процесор.
Реба Създадено на 23.11.2024, видяно: 204 пъти. #128132
в хардуерните задачи много често се ползват прекъсвания, което е "многозадачност". ако нямаш гаранция че връщането от прекъсване е бетон все едно нямаш изобщо прекъсвания, трябва да караш на полинг което веднага прави една камара задачи трудни или невъзможни. аз не знам какъв точно е казуса за който говори палавров, може да е бъг на точно определен процесор или да се случва в някакви много специални условия.
Ако няма гаранция за 100% връщане, наистина е за боклука тоя проц. Силно ме съмнява, че има такива на пазара. Ама да видим какво се има предвид под "прекъсване".
Като напълниш таймер, или вдигнеш пин - спира програмата мигновено и изпълнява кратка функция, закачена на прекъсването. Обикновено е накована хардуерно, int зарежда прог каунтър на неговия адрес. Само не тряя забраяш reti.
Като гледам капацитета на коментиращите, мисля, че няма смисъл от повече коментари … що ти била многозадачност без да си наясно що е то ПОС терминал - питай Миро в другия форум да ти обясни - аз нямам нерви и мерак …
И най-мизерните контролери, се пишат многозадачно, коментираните прекъсвания.
Имам една книга - цяла ос за древен 8 битов 8051.
Нивото на коментиращия е ужасно ниско по принцип не само тук
В БгБуля броят 3 пъти по 3, всички дупки по телесата, против уроки.
Това, къде си цъкаш картата в магазина, на прав път ли съм?
0 1