| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Много странен проблем http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16443 |
Страница 1 от 1 |
| Автор: | Н'бабане Гт'муан'га [ Съб Мар 30, 2019 4:44 pm ] |
| Заглавие: | Много странен проблем |
Къса ми нервите вече... Значи постановката е следната (с опростен пример): void func(unsigned char **v) { if(v==NULL) return; if(*v==NULL) { ....... } else { ....... { } ............. ............. unsigned char *p=NULL; func(&p); Това парче код работи безупречно в Code Blocks, обаче с XC32 в 0.0001% от случаите води до ексепшън в тоя ред "if(*v==NULL)" Мислех че може да има някакви проблеми с подравняване и слагах атрибути, обаче не помогна... Някакви други идеи защо се получава така?
|
|
| Автор: | miro_atc [ Съб Мар 30, 2019 4:55 pm ] | |||||||||
| Заглавие: | Re: Много странен проблем | |||||||||
Това не е атомична операция. Ако имаш конкуретна нишка/прекъсване се получават точно инфекциите за които говориш. Трябва ти критична секция или да замениш всичко с атомични операции. |
||||||||||
| Автор: | Н'бабане Гт'муан'га [ Съб Мар 30, 2019 4:58 pm ] | ||||||||||||||||||
| Заглавие: | Re: Много странен проблем | ||||||||||||||||||
Нямам конкурентни нишки и съм забранил прекъсванията |
|||||||||||||||||||
| Автор: | miro_atc [ Съб Мар 30, 2019 5:09 pm ] |
| Заглавие: | Re: Много странен проблем |
А дебъгер нямаш ли? Или поне обработка на ексепщъните да видиш как е точно и откъде може да се получава. Вариантите са много, препълване на стека, мазане по паметта... Не знам, очевидно стойността на v не е валиден адрес и като го ползваш като указател гърми. Добре е все пак да видиш каква е стойността, така че евентуално да се сетиш откъде е дошла. |
|
| Автор: | TheWizard [ Съб Мар 30, 2019 5:25 pm ] |
| Заглавие: | Re: Много странен проблем |
Едва ли е проста ситуацията... навярно не е точно така както си я написал тук... Четеш нещо кеширано? ДМА? |
|
| Автор: | Н'бабане Гт'муан'га [ Съб Мар 30, 2019 8:01 pm ] |
| Заглавие: | Re: Много странен проблем |
В крайна сметка се оказа подравняване все пак... Защото по принцип в кода входът на функцията понякога е елемент от пакетирана структура. Махнах насилственото пакетиране и нещата заспаха |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|