Time of Update: 2018-12-04
struct test_1 { int (*t1)(void); int (*t2)(void);};struct test_2 { int (*t1)(void);};struct test { union { struct test_1 t1; struct test_2 t2; } u; int dummy;};static int foo(void){return 0;};static struct test t = {
Time of Update: 2018-12-04
由於我們的firmware不希望用到C庫,所以連結器指令碼和c-runtime都需要自己寫,其實也沒寫,無非就是把C庫的拿來改了幾行。這沒什麼好說的,就把avr c-runtime主要做了寫啥記錄記錄: 1. 設定中斷向量表(vector),這在datasheet中是有定義的,每款晶片不同,向量個數亦不同,為了做到通用,這裡定義了100+的向量,實際上,單獨晶片通過定義_VECTORS_SIZE來控制最終有多少個向量; 2.
Time of Update: 2018-12-04
沒辦法,為了在 windows下燒寫avr的firmware,只能妥協裝個cygwin了。老大給了份日文文檔,好在我有一定基礎,那些英文還是認識的,知道要裝啥。 1.latest cygwin, 選中:一些列開發必備的工具,記得要選make,這裡他沒告訴我;安裝之; 2.flip-3.4.1 for at90usbxxx 3.latest winavr for toolchain 期間遇到幾個問題:1.
Time of Update: 2018-12-04
首先保證當前核心的標頭檔存在,然後寫hello.c以如下內容: /*****************************************************************************/ #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> static int hello_init(void) {
Time of Update: 2018-12-04
這篇隨筆將介紹對稱式加密中分組密碼的工作模式 --
Time of Update: 2018-12-04
BUG,程式員生活的一部分,相互離不了,互相不歡喜。也許你有精彩的人生,你有精彩的BUG嗎? 它困擾了我快2周,姑且稱它為小A,小A它一直不敢正視我,天天在逃避,每次與它擦肩而過,感覺很熟悉,又發現其實咱們不太熟。正因為如此,它才可以得意這麼久;也正因為如此,它才連累了它的眾多親朋與好友,不過那些傢伙也非善類,裝好人也不是一天兩天了,只是還沒給它們機會出來曝光而已。其實大家都一樣,大多數人一輩子也都是碌碌無為的隱藏著,你還想那著杆起義?做夢! 人總是喜歡展示出好的一面,我也一樣,所以每天如何的
Time of Update: 2018-12-04
該程式是一點點累加上來的,一開始file_operations 中只實現了read()及open()函數進行測試只要這一步測試通過了後面的添磚加瓦就相對容易了很多,後來成功後添加write(),ioctl()函數;該驅動模組相對簡單,不過我也是花了好幾個小時才算調試成功。該模組可以編譯後直接插入當前正在跑的Ubuntu中測試回合不過驅動模組中的printk()資訊不會在終端上顯示,它是輸入到了/var/lo/messages檔案中。可以使用tail -f /var/log/messages
Time of Update: 2018-12-04
看文檔是程式員必須掌握的一項基本功,尤其是英文的文檔,主要的原因,我想還是因為咱在這方面落後吧。 那麼我到底看了多少文檔呢?我借其他程式員的回答 --
Time of Update: 2018-12-04
在拿到一塊空白板子時,我們的bootloader如何燒到FLASH上呢? 一個途徑就是通過模擬器,ARM有進階模擬器,進階貨是不錯,不過我們選擇窮人的方式,也是個模擬器,至於是啥,網上一搜一大堆,jlink, openjtag, usb...,東西很多,國內便宜(大家都知道)。按照標準,其實這些叫作適配器,反正就是一介面,連上去就好了,對了,是JTAG介面。 以前不懂的時候,以為接上就能燒了?誰來燒呀?CPU燒?燒什麼呀?
Time of Update: 2018-12-04
網路上很多分析某段代碼的文檔,或是某個資料結構,或是某段演算法。其中有大半自己瞭解足夠,用來協助別人卻是大半力不從心。究其原因大多是因為這些文檔僅僅說起然,而不談其所以然,只是說了半天這個做了些什麼,至於為什麼要這樣做,這樣做能夠帶來什麼好處卻是未能講的明白,也許有人懂了,但不懂其中奧妙的肯定也大有人在。這裡一個為什麼要講出來那是要花真功夫,真力氣,需要寫作者有對應的技術背景和功底的,照搬別人的寫作文檔或者對著代碼進行翻譯並不是能夠真正領會並舉一反三的方法。這一點問題上我也是犯了許多錯誤,分析文
Time of Update: 2018-12-04
搞了一個早上,終於把PATCH提交到社區了,等待審批。 1/ git-clone project.repo.git 2/ do some modifications 3/ git-commit -a -m "your message that will appare as the PATCH title and description" 4/ git-format-patch -s origin # generate a patch by option # -s is add
Time of Update: 2018-12-04
http://blog.chinaunix.net/u1/42145/showart_327438.htmlvc中字串和數字轉換的函數:atoi,atol,strtod,strtol,strtoul 類型轉換 atoi,atol,strtod,strtol,strtoul實作類別型轉換atof(將字串轉換成浮點型數)相關函數atoi,atol,strtod,strtol,strtoul表標頭檔#include <stdlib.h>定義函數double atof(const char
Time of Update: 2018-12-04
avr(at90...)的中斷處理函數"註冊"流程: head.S中設定了預設中斷處理(即:not_defined -> reset),同時注意到,這些位置的標記(symbol)都是弱的(.weak指明),也就是說,可以在程式中替換這些預設中斷處理,也就是正常的方式,通過編譯器定義好的方式寫中斷函數就可以了,編譯器將我們自訂的中斷處理函數做如下處理:1. 儲存現場(prologue);2. 做真正的事;3. 還原現場(epilogue);4.
Time of Update: 2018-12-04
花了1.5天,終於把 debian 裝好 T410s 了。這麼簡單的東西竟然被我搞成這麼複雜。 糾正了我幾個錯誤的白癡認識:1. 曾經一直無視 debian iso CD 鏡像後面的數字,認為它們是一樣的,可以隨便選擇一個,沒想到只有CD-1才是帶 boot 的。難怪我下那麼多不能自啟動呢! 2. 裝64位系統,上來感覺良好,直接認為選擇 debian-ia64-iso 就行了,沒想到刻了 N 張都不能啟動(虛擬機器也不行),經同事指點,才知道 debian-IA64 不是我理解的 IA-64,
Time of Update: 2018-12-04
前幾天看到老大的BLOG,好像提到做技術的創造真正的價值。當時覺得好像是那麼回事。今天與兄長聊了會,我又覺得有些問題。 就拿自己來說,我創造了什麼價值?我做的對誰有益?誰需要這所謂的價值?似乎沒有。我做的事,沒有任何產出,能算創造價值嗎?半死不活的狀態似乎只能是消耗別人的創造物,連IT民工的稱謂都不配了。 一個產品可以是1. 內部接近完美,外表光鮮;2. 內部粗糙,外表光鮮呢;3.
Time of Update: 2018-12-04
今天遇到一“怪事”: 程式正常輸出幾千條log資訊,能全部輸出,但是通過重新導向到一個檔案中時總是少那麼幾十條,嘗試了輸出:2000,3000條結果差不多。 後來小吳告訴我說是行緩衝的問題,果然如此,加上個fflush()就行了。 為什麼會遇到這個問題?1. 我們希望實現ISAKMP的橢圓曲線金鑰交換,因此需要先實現橢圓曲線的基本運算,即:點+點和點*點。使用了sec的測試資料,但結果卻始終不對,於是乎,在每次運算時,加上調試資訊,將運算結果輸出;2.
Time of Update: 2018-12-04
CString 裡的一些函數與VB裡字串處理的函數很多都是類似的。1.CString::IsEmptyBOOL IsEmpty( ) const;傳回值:如果CString 對象的長度為0,則返回非零值;否則返回0。說明:此成員函數用來測試一個CString 對象是否是空的。樣本:下面的例子說明了如何使用CString::IsEmpty。// CString::IsEmpty 樣本CString s;ASSERT( s.IsEmpty() );請參閱
Time of Update: 2018-12-04
一,
Time of Update: 2018-12-04
說到對齊,不少學習C語言的同學自然會想到資料結構中成員的對齊,比如,常有面試題目是會問:struct { char a; short b; int c;};佔用幾個位元組?這個不恰當的例子確實是和對齊有些相關,但有幾個人遇到不對齊的麻煩了呢? 昨天發現一個奇怪的現象:點燈測試代碼正常,加入了一個函數塊就不正常了,代碼塊如下: uint8_t pid = 0;uint8_t tid = 0; void foo1(void){
Time of Update: 2018-12-04
相同的硬體,相同的軟體,一個能跑,一個不能跑,為什嗎?做軟體的人,懷疑硬體問題,做硬體的人,懷疑軟體問題,查了3個星期,只是把問題定位為DMA的不工作的問題,至於為什麼,還是不知道。dv跑case,結果硬體沒問題,匯流排正常。為什嗎?為什嗎?突然,同事說出了,這次晶片DMA要用物理地址!難道上次的不需要?果然,上次設計的晶片,不需要,CPU會有些小處理,而這塊則不同了,哎!~告訴lv.zheng,被他BS,天底下的DMA都應該是用物理地址的!還說了一堆體系的概念,複雜呀。這個BUG,潛伏期,很長