會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
各位先進好:

如題,目前所使用的MCU為SAMR30G18A
在使用sample project的時候發現
printf函式無法print 浮點數到Accessport 等...終端機監控軟體上

但是,如果sample code是使用SAMR30E18A的upload後
卻可以print出float了

目前找不到解決的辦法
但是目前有找到類似的問題

如下連結所示
https://www.avrfreaks.net/forum/printf ... ting-float-number-problem

https://blog.startingelectronics.com/f ... rintf-atmel-studio-avr-c/


IDE裡面皆無連結裡所示的設定選項

問題誠如上述
再麻煩各位先進幫忙解答了
謝謝

1月16日 11:10:22
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 15046
等級: 73; EXP: 89
HP : 1093 / 1822
MP : 5015 / 85700
離線
請穩一下你的軟體 C compiler 的版本即使用的 Studio 的 ASF 又是哪一個版本?

1月16日 13:19:48
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
版本如圖所示
3.47版
https://imgur.com/TazsEG0

1月16日 13:37:55
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
目前從國外的網站有找到解決辦法
但是結果似乎不太好...
Memory使用量會多一倍出來

不知道是否有其他的解決辦法呢?
謝謝
https://community.atmel.com/forum/samc ... not-printing-float-values

1月16日 18:20:15
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1051
等級: 28; EXP: 58
HP : 0 / 689
MP : 350 / 26186
離線
>> ...Memory使用量會多一倍出來

可以試試 寫個副程式專門處理...
利用 乘以千倍後 整數跟小數都是"整數"
然後自己加點進去...

以下只是舉例:
沒有驗證過(值很大或很小可能會有問題)

void printf_3f(float val){
int dig;
int flt;
dig = int(val);
flt = int(val*1000)%1000;
printf("%d.%03d", dig, flt);
}

這樣可以不用到%f

1月16日 19:40:47
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
先謝謝前輩的回覆

我有想過這個方法
但是這樣在程式運行時間上又會多了一些出來...
我怕MiWi在Handshake會因此失敗
這個部分待驗證
目前只是想在Debug時比較可以清楚的知道Sensor的資訊而已
謝謝

最主要還是想知道是不是有辦法可以透過其他的方式解決
目前比較納悶的是
同系列的Sample Code在同一顆MCU上跑會有不同的結果...
所以我比較偏向是Library的問題導致的
關閉優化不是個好辦法,程式會瞬間變肥...
希望原廠能提供解套辦法

謝謝

1月17日 11:16:18
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1051
等級: 28; EXP: 58
HP : 0 / 689
MP : 350 / 26186
離線
這算workaround 或 backup

在主要原因沒有完全找到之前的對策之一...

如果不介意小數點,直接乘千倍...
void printf_3f(float val){
printf("%03d", val * 1000);
}

或提醒自己要除1000
void printf_3f(float val){
printf("%03d/1000", val * 1000);
}

1月17日 12:14:21
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
謝謝前輩

先等待版主的回覆了

1月20日 09:01:33
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
管理員
註冊日期:
2017/11/22 11:20
所屬群組:
站務管理者
註冊審核
文章: 101
等級: 9; EXP: 5
HP : 0 / 201
MP : 33 / 1488
離線
如您之前找到的方式, 這是最快的方式
在Project Properties中的
Toolchain -> ARM/GNU Linker -> General:
將預設的打勾取消即可使用printf列印浮點數
[v] Use size optimized library (--specs=nano.specs)


實測一個簡單的SAMD21G18A的專案
有打勾時(無法列印float)
Program Memory Usage: 9752 bytes 3.7 % Full
Data Memory Usage : 8720 bytes 26.6 % Full
取消打勾時(可以列印float)
Program Memory Usage: 35348 bytes 13.5 % Full
Data Memory Usage : 11176 bytes 34.1 % Full

另外一個方法是在main()或是function()中, 添加inline assembler code
asm(".global _printf_float");
asm(".global _scanf_float");
實測一個簡單的SAMD21G18A的專案
上面有打勾以及加上inline assembler code時的memory consumption(比沒打勾節省一點)
Program Memory Usage: 24860 bytes 9.5 % Full
Data Memory Usage : 9088 bytes 27.7 % Full

如何降低Data Memory記憶體的用量
可以將 [專案]\src\ASF\sam0\utils\linker_scripts\[晶片家族]\gcc\[晶片代號]_flash.ld
中的預設Stack用量調小即可

下面是SAMD21G18A的設定
[專案]\src\ASF\sam0\utils\linker_scripts\samd21\gcc\samd21g18a_flash.ld

預設開啟了8KByte(0x2000)的Stack.
/* The stack size used by the application. NOTE: you need to adjust according to your application. */
STACK_SIZE = DEFINED(STACK_SIZE) ? STACK_SIZE : DEFINED(__stack_size__) ? __stack_size__ : 0x2000;

2月03日 10:30:30

Libra 於 2020年02月03日 11:14:49
Libra 於 2020年02月03日 11:16:34
Libra 於 2020年02月03日 11:17:20
轉換PDF檔 列印


Re: Atmel studio 7 無法print float
新會員
註冊日期:
2019/11/19 14:59
所屬群組:
註冊會員
文章: 13
等級: 2; EXP: 38
HP : 0 / 34
MP : 4 / 54
離線
謝謝您的回覆,我會再測試看看,謝謝。

2月04日 10:12:24
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project