發表文章

目前顯示的是 12月, 2015的文章

Arduino記憶體的二三事

在任何電子裝置中記憶體的操作與管理是很重要的是,尤其是在記憶體容量較小的微控制器上。 Programmer必須考量到需要儲存資料的量,以及未來若需要擴充的解決方案。否則就會面臨資料錯誤或損失的窘境。 以avr-based的Arduino控制器來看內建記憶體可分為3種 1.Flash memory 2. SRAM   3. EEPROM   Flash memory稱為快閃記憶體,在Arduino中是用來儲存你所撰寫的程式碼的。 SRAM稱為隨機存取記憶體,是用來存放執行時期的資源和變數,所以當設備斷電後記憶體內的資源也隨之被釋放掉。 EEPROM則是電子抹除式可複寫唯讀記憶體,是用來存放長期資料的,當有資料不想要在系統斷電後就消失掉,那就放在這邊吧。 UNO使用的ATmega328記憶體規格如下 Flash 32k bytes (of which .5k is used for the bootloader) SRAM 2k bytes EEPROM 1k byte Mega2560使用的ATmega2560記憶體規格如下 Flash 256k bytes (of which 8k is used for the bootloader) SRAM 8k bytes EEPROM 4k byte 我們可以注意到UNO的SRAM只有2K,這個容量很容易就會用完了,舉個例子來說。 假設你宣個一個字元陣列如下 char message[] = "I support the Cape Wind project."; 每一個字元都佔一個bytes,所以這樣你就已經用掉了 33 個bytes。 你就會發現如果你需要處理很多字串或用到很多變數,你很容易就到達2048的上限。 當到記憶體(SRAM)達上限後會發什麼事情? 大多情況下程式可能還是可以運作,只是可能不會是你預期的情況,你的資料可能錯誤,或者遺失。更慘的,甚至你的程式可能完全無法動作。 那我們要如何解決這個問題呢? 你可以: 1.把資料丟到其他儲存裝置上 2.可以用較小的資料型態來存放變數,如用 byte 取代 int ,前提是你確定不會有溢位的情況。 3.使用flash記憶體取代sram,不過當程式在運行時不能修改資料。(使用PROG

Fragment中的ViewPager--使用Nested Fragment

圖片
目的 :在Fragemnt中放入ViewPager,可在功能表中切換fragment頁面,而子Fragment中又有可滑動的pager 首先有幾個需要注意的地方 1.用來實做ViewPager的Fragment的類別引用android.app.Fragment,而非support.v4.app.Fragment,否則無法使用巢狀fragment 2.在API 23以前使用Fragment中類別OnAttach(Activity activity),API 23以後才用OnAttach(Context Context) 結構圖 先提供Adapter每一個子頁面的資料,viewpager就可決定要顯是哪一個頁面。 而viewpager本身也是放在一個fragment中,所以UI可以更靈活操作什麼時候要顯示這個畫面 首先需要新增一個放置ViewPager的父Fragment使用List集合加入每一個頁面代表的Fragment 宣告一個自訂的 PagerAdapter ,傳入FragmentManger和List建構物件 注意:因為提供page的所代表的Fragment是子Fragment所以提供的Manager要用getChildFragmentManager() public class fragment_slide extends Fragment { private ViewPager mViewPager ; private View view ; private android.support.design.widget.TabLayout mTabs ; Activity activity ; @Override public void onActivityCreated(Bundle savedInstantState) { super .onActivityCreated(savedInstantState); initialTabs(); initialViewPager(); } @Override public View onCreateView(LayoutInflater inflater,