Микроконтролери и електроника
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 ]
Заглавие:  Много странен проблем

Къса ми нервите вече... :evil:
Значи постановката е следната (с опростен пример):


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)"
Мислех че може да има някакви проблеми с подравняване и слагах атрибути, обаче не помогна...

Някакви други идеи защо се получава така? #-o

Автор:  miro_atc [ Съб Мар 30, 2019 4:55 pm ]
Заглавие:  Re: Много странен проблем

Н'бабане Гт'муан'га написа:
if(v==NULL) return;
if(*v==NULL) {
.......
}


Това не е атомична операция. Ако имаш конкуретна нишка/прекъсване се получават точно инфекциите за които говориш. Трябва ти критична секция или да замениш всичко с атомични операции.

Автор:  Н'бабане Гт'муан'га [ Съб Мар 30, 2019 4:58 pm ]
Заглавие:  Re: Много странен проблем

miro_atc написа:
Н'бабане Гт'муан'га написа:
if(v==NULL) return;
if(*v==NULL) {
.......
}


Това не е атомична операция. Ако имаш конкуретна нишка/прекъсване се получават точно инфекциите за които говориш. Трябва ти критична секция или да замениш всичко с атомични операции.


Нямам конкурентни нишки и съм забранил прекъсванията

Автор:  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/