| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| STM32F401RE изпълнява код само един път. http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18929 |
Страница 1 от 1 |
| Автор: | VPavlov [ Сря Авг 16, 2023 3:23 pm ] | ||||||||||||||||||
| Заглавие: | STM32F401RE изпълнява код само един път. | ||||||||||||||||||
Здрасти, В main.c имам това:
В rawDataRead (); прочитам нулирам един uint8_t (readReg[1]), който ползвам за буферна променлива, която съхранявата даден регистър. Правя една маска uint8_t = 1, тъй като мисля че ме интересува най десния бит 00000001, но не съм на сто процента сигурен дали всъщност не тябва да е 10000000. После проверявам дали стойността на дадения бит е 1 и ако е, прочитам два регистъра и ги обединявам в int16_t. Криво-ляво то тук работи. Проблемът е че в режим на дебъг, а май и в нормално изпълнение rawDataRead (); се изпълнява само един път, по някога два, но в крайна сметка замира. Не разбирам защо се случва това нещо. Ако имате съвети благодаря предварително!
|
|||||||||||||||||||
| Автор: | syscop [ Сря Авг 16, 2023 6:50 pm ] |
| Заглавие: | Re: STM32F401RE изпълнява код само един път. |
Светни един диод преди да викнеш функцията и го угаси след това. Може да свържеш скоп към него да гледаш какво става. |
|
| Автор: | VPavlov [ Сря Авг 16, 2023 9:26 pm ] | |||||||||
| Заглавие: | Re: STM32F401RE изпълнява код само един път. | |||||||||
Благодаря, мисля че ще мога да пусна бордовия, на PA5. Карам го стъпка по-стъпка, в смисъл че съм сложил брейкпоинт-а в началото на функцията и после с F6 напредвам докато спре. Обикновено спира след като излезе от функцията, по някога влиза повторно в нея и до там. Понеже ползвам джъмпер кабели се чудя дали пък нещо да не прави добър контакт? Ако "скоп" стои за осцилоскоп то нямам лесен достъп до такъв, да не говорим че въобще не знам как се ползва |
||||||||||
| Автор: | iss [ Сря Авг 16, 2023 10:22 pm ] | |||||||||
| Заглавие: | Re: STM32F401RE изпълнява код само един път. | |||||||||
Както са ти препоръчали вече - със светкането на диод може да се хванат проблемите много бързо, например светкаш го преди ais2ih_read_register и го гасиш на следващия ред, така при изпълнение ако остане да грее значи изпълнението не е изляло от горната фунция. Обаче да ти обърна внимание на други неща: readRegH/readRegL няма нужда да са uint8_t, направо ги сложи да са uint16_t (или по точно да са толкова uintXX_t колкото е CombData). То зависи какво е точно CombData? Защо не направо:
Освен това твоето кастване с int16_t (число със знак или signed) може да доведе до интересни ефекти. И най-добрият съвет вече са ти го дали (без лоши чувства!): I don't recommend using ChatGPT for programming advice. It will produce some very confident-sounding but absolutely incorrect answers. |
||||||||||
| Автор: | VPavlov [ Чет Авг 17, 2023 9:49 am ] | ||||||||||||||||||
| Заглавие: | Re: STM32F401RE изпълнява код само един път. | ||||||||||||||||||
Прав си друже, обаче учещ се човек има стотици въпроси, не мое да спамим форумите за всички. Работим с каквото има, ако се "закучат" много нещата тогава викаме неволята. Вярно че го предпочитам пред Гугъл и вярно че бота бърка работите и всеки път като го поставя под съмнение ми пише че съм бил абсолютно прав Благодаря ти за съветите! Принципно чета 8 битови регистри и поради тази причина полагам съдържанието в 8 битови променливи (това от туториала който гледах, за друг тип сензор). На края ги обединявам в 16 битова променлива, защото така го дават в един документ предназначен да подпомогне програмирането, за този сензор - application notes. Всъщност там не е обяснено точно това, използват термина конкатенация и добавят примерни пресмятания, в които примери обаче имаше минусови стойности, от там и обединението в число със знак. Разбирам че предложението ти е да извърша конкатенация като запиша 8 битовите регистри последователно в 16 битовата променлива и най-вероятно така е по-добре, най-малкото защото ще пропуснем използването на readRegH&L. Да ти кажа право мина ми през акъла, но остана висящо. Ще го направя. |
|||||||||||||||||||
| Автор: | relsys [ Вто Авг 22, 2023 12:35 pm ] | |||||||||
| Заглавие: | Re: STM32F401RE изпълнява код само един път. | |||||||||
Той тоя код как въобще се компилира? Половината променливи не са декларирани.... Ползвай union за прочитането на данните. Така ще спестиш шифтването.
Четеш 2 пъти в readData[0] и readData[1], u после взе аш резултата от combData. |
||||||||||
| Автор: | palavrov [ Вто Авг 22, 2023 2:53 pm ] | ||||||||||||||||||
| Заглавие: | Re: STM32F401RE изпълнява код само един път. | ||||||||||||||||||
С едно на ум за индианците, големи, малки ... |
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|