Jump to content

    
firstvald

double в параметрах функции передается как 0

Recommended Posts

Указанных данных вполне достаточно ... для составления гороскопов:good2:

А вот для решения указанной проблемы нужно хотя бы это:

1) версия компилятора (не путать с версией среды!)

2) ключи/опции компилятора,

3) код,

Share this post


Link to post
Share on other sites
2 часа назад, firstvald сказал:

Столкнулся с тем, что параметры функции типа double передаются внутрь как 0. Если типы сменить на float - передается нормально. Keil 517

Была cхожая проблема, но оказалось сам дурак: в функции параметры double, а в вызове и использовании было extern float. Keil при компиляции не ругался...

Share this post


Link to post
Share on other sites
2 hours ago, firstvald said:

Столкнулся с тем, что параметры функции типа double передаются внутрь как 0. Если типы сменить на float - передается нормально. Keil 517

Воспользуйтесь окном дизассемблера. Посмотрите в каких регистрах (должно быть в r0-r3) передаются ваши double, и что получается, когда начинает выполнятся код функции.

Share this post


Link to post
Share on other sites
19 minutes ago, jcxz said:

Партизаны так просто не сдаются. Гестапо надо приложить усилия!  :biggrin:

Партизану по ходу нужна не помощь в решении проблемы, а просто потрещать о том, о сём )))

Share this post


Link to post
Share on other sites
14 часов назад, V_G сказал:

в функции параметры double, а в вызове и использовании было extern float. Keil при компиляции не ругался...

И не должен был. Он поверил вам на слово и сделал ровно то, что вы ему сказали (сгенерировал в местах вызова функции вызов функции с параметром типа float). Соответствие применения (вызова) и реализации он проверить не может из-за раздельной компиляции файлов.

Чтобы исключить такие ситуации к файлу реализации инклудят его же хедер. А в использующем файле вместо extern ... также инклудят хедер. Тогда компилятор может проверить соответствие объявления определения и использования функции.

Share this post


Link to post
Share on other sites

--c99 -c --cpu Cortex-M4.fp -g -O1 --apcs=interwork --split_sections -I../Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc -I../Drivers/STM32L4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32L4xx/Include -I../Drivers/CMSIS/Include -I..\Drivers\STM32L4xx_HAL_Driver\Inc\ --C99 --feedback=aaa.txt 
-I "C:\Keil_v5\ARM\workspace\FLOW\V69 15 10 2020\TST_PRG\MDK-ARM\RTE" 
-I C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.5.1\CMSIS\Core\Include 
-I C:\Keil_v5\ARM\PACK\Keil\STM32L4xx_DFP\2.4.0\Drivers\CMSIS\Device\ST\STM32L4xx\Include 
-I C:\Keil_v5\ARM\PACK\Keil\STM32L4xx_DFP\2.4.0 
-D__UVISION_VERSION="517" -D_RTE_ -DSTM32L476xx -DUSE_HAL_DRIVER -DSTM32L476xx -o "TST_PRG\*.o" --omf_browse "TST_PRG\*.crf" --depend "TST_PRG\*.d" 
 

 

 

struct to_stand_t {
	               double tau;//T/Têð
	             
	               double pi;//P/Pêð
	           
	               double omega_stand;
                  };


        struct to_stand_t to_stand;

double omega_stand(double param_tau,double param_pi);



to_stand.omega_stand=omega_stand((to_stand.tau),(to_stand.pi));

 

 

 

 

 

 

2.jpg

1.jpg

и проверю подозрение на дату лицензии

Share this post


Link to post
Share on other sites

и, я бы сказал вот какую штуку.

простейший тест - беру параметр и возвращаю его тут же из функции.

когда параметры функции делел флоатами - я их видел правильно и вьювером (при наведении курсором на параметр) и в регистрах процессора.

когда я делаю дабл, то я не вижу правильно ни вьювером, ни в регистрах.  возвращенное функцией значение - правильное.  

 

double omega_stand(double param_tau,double param_pi)
{
 

	return(param_tau);	
	

	
	
}//double omega_stand(double param_tau,double param_pi)

 

Share this post


Link to post
Share on other sites
10 часов назад, firstvald сказал:

возвращенное функцией значение - правильное.  

Да это классика - так оно обычно и получается. потмоу что флотовые параметры в регистрах ФПУ передаются. и  у них бывает какойто свой ABI. а дебагеры насколько я понимаю, такой трюк пока не умеют ловить, только на стеке параметры показывают.

Edited by AlexRayne

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.