#import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *)colorWithHex:(long)hexColor; + (UIColor *)colorWithHex:(long)hexColor alpha:(float)opacity; @end #import "UIColor+Hex.h" @implementation UIColor (Hex) + (UIColor*) colorWithHex:(long)hexColor; { return [UIColor colorWithHex:hexColor alpha:1.]; } + (UIColor *)colorWithHex:(long)hexColor alpha:(float)opacity { float red = ((float)((hexColor & 0xFF0000) >> 16))/255.0; float green = ((float)((hexColor & 0xFF00) >> 8))/255.0; float blue = ((float)(hexColor & 0xFF))/255.0; return [UIColor colorWithRed:red green:green blue:blue alpha:opacity]; } @end
你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用Map.Entry类,你可以得到在同一时间得到所有的信息。标准的Map访问方法如下:
Set keys = map.keySet( ); if(keys != null) { Iterator iterator = keys.iterator( ); while(iterator.hasNext( )) { Object key = iterator.next( ); Object value = map.get(key); ;.... ;} }
然后,这个方法有一个问题。从Map中取得关键字之后,我们必须每次重复返回到Map中取得相对的值,这是很繁琐和费时的。
幸运的是,这里有一个更加简单的途径。Map类提供了一个称为entrySet()的方法,这个方法返回一个Map.Entry实例化后的对象集。 接着,Map.Entry类提供了一个getKey()方法和一个getValue()方法,因此,上面的代码可以被组织得更符合逻辑。举例如下:
Set entries = map.entrySet( ); if(entries != null) { Iterator iterator = entries.iterator( ); while(iterator.hasNext( )) { Map.Entry entry =iterator.next( ); Object key = entry.getKey( ); Object value = entry.getValue(); ;.... } }
尽管增加了一行代码,我们却省略了许多对Map不必要的“get”调用。同时,提供给开发人员一个同时保持了关键字和其对应的值的类。Map.Entry同时也提供了一个setValue()方法,程序员可以使用它修改map里面的值。
Hashtable内部排列的方式是散列排布,所以当输出信息时会是无序的。为了能保证输出的数据按照顺序排列,不要渴望用java自带的函数来对 Hashtable对象进行调整处理。当我们获取Hashtable里的KEY和VALUE时,一般都运行了Map.Entry类来转换,好,现在就用这 个类来作文章,我具体写了一个方法。
代码:
/**
* 方法名称:getSortedHashtable
* 参数:Hashtable h 引入被处理的散列表
* 描述:将引入的hashtable.entrySet进行排序,并返回
*/
public static Map.Entry[] getSortedHashtable(Hashtable h){
Set set = h.entrySet();
Map.Entry[] entries = (Map.Entry[])set.toArray(new Map.Entry[set.size()]);
Arrays.sort(entries,new Comparator(){
public int compare(Object arg0, Object arg1) {
Object key1 = ((Map.Entry)arg0).getKey();
Object key2 = ((Map.Entry)arg1).getKey();
return ((Comparable)key1).compareTo(key2);
}
});
return entries;
}
调用这个方法:
Map.Entry[] set = getSortedHashtable(t);
//perportyTable
for (int i=0;i<set.length;i++){
System.out.println(set[i].getKey().toString());
System.out.println(set[i].getValue().toString());
}
第一步:从http://www.denx.de/wiki/U-Boot/SourceCode网站下载u-boot-2008.10.tar.bz2这个文件。
第二步:建立自己的交叉编译环境,我用的是arm-none-linux-gnueabi-,可以从这里下载最新的交叉编译器。建立的系统为fedora 16。设置好交叉编译环境变量。一般觉得export命令来设置会比较好用,有的会提供修改profile的方式和bash的方式。本人认为还是动态设置比较好。
第三步:首先用make disclean命令清除以前编译的u-boot.bin文件。接着用make at91sam9261ek_config命令来配置好编译的目标。
第四步:用vim Makefile命令,修改
ifeq ($(ARCH),arm) CROSS_COMPILE = arm-linux- 改为 arm-none-linux-guneabi- endif第五步:编译,make
如果编译通过会生成 u-boot.bin文件
第六步:移植LCD 显示驱动:
需要修改LCD时序参数,以适合本站的竖屏。
u-boot-2008.10\board\atmel\at91sam9261ek\at91sam9261ek.c: 修改结构体:
vidinfo_t panel_info = { vl_col: 240, vl_row: 320, vl_clk: 4965000, vl_sync: ATMEL_LCDC_INVLINE_INVERTED | ATMEL_LCDC_INVFRAME_INVERTED, vl_bpix: 3, vl_tft: 1, vl_hsync_len: 5, vl_left_margin: 1, vl_right_margin:33, vl_vsync_len: 1, vl_upper_margin:1, vl_lower_margin:0, mmio: AT91SAM9261_LCDC_BASE, };然后修改为:
vidinfo_t panel_info = { vl_col: 480, vl_row: 272, vl_clk: 9000000, vl_sync: ATMEL_LCDC_INVLINE_INVERTED | ATMEL_LCDC_INVFRAME_INVERTED, vl_bpix: 3, vl_tft: 1, vl_hsync_len: 41, vl_left_margin: 2, vl_right_margin:2, vl_vsync_len: 10, vl_upper_margin:2, vl_lower_margin:2, mmio: AT91SAM9261_LCDC_BASE, };修改完后,下面还需要修改:
at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */ at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */ at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */ at91_set_A_periph(AT91_PIN_PB4, 0); /* LCDCC */ at91_set_A_periph(AT91_PIN_PB7, 0); /* LCDD2 */ at91_set_A_periph(AT91_PIN_PB8, 0); /* LCDD3 */ at91_set_A_periph(AT91_PIN_PB9, 0); /* LCDD4 */ at91_set_A_periph(AT91_PIN_PB10, 0); /* LCDD5 */ at91_set_A_periph(AT91_PIN_PB11, 0); /* LCDD6 */ at91_set_A_periph(AT91_PIN_PB12, 0); /* LCDD7 */ at91_set_A_periph(AT91_PIN_PB15, 0); /* LCDD10 */ at91_set_A_periph(AT91_PIN_PB16, 0); /* LCDD11 */ at91_set_A_periph(AT91_PIN_PB17, 0); /* LCDD12 */ at91_set_A_periph(AT91_PIN_PB18, 0); /* LCDD13 */ at91_set_A_periph(AT91_PIN_PB19, 0); /* LCDD14 */ at91_set_A_periph(AT91_PIN_PB20, 0); /* LCDD15 */ at91_set_B_periph(AT91_PIN_PB23, 0); /* LCDD18 */ at91_set_B_periph(AT91_PIN_PB24, 0); /* LCDD19 */ at91_set_B_periph(AT91_PIN_PB25, 0); /* LCDD20 */ at91_set_B_periph(AT91_PIN_PB26, 0); /* LCDD21 */ at91_set_B_periph(AT91_PIN_PB27, 0); /* LCDD22 */ at91_set_B_periph(AT91_PIN_PB28, 0); /* LCDD23 */
为:
01.static void at91sam9261ek_lcd_hw_init(void) 02.{ 03. at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */ 04. at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */ 05. at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */ 06. at91_set_gpio_value(AT91_PIN_PB4, 1); /* LCDCC */ 07. at91_set_A_periph(AT91_PIN_PB7, 0); /* LCDD2 */ 08. at91_set_A_periph(AT91_PIN_PB8, 0); /* LCDD3 */ 09. at91_set_A_periph(AT91_PIN_PB9, 0); /* LCDD4 */ 10. at91_set_A_periph(AT91_PIN_PB10, 0); /* LCDD5 */ 11. at91_set_A_periph(AT91_PIN_PB11, 0); /* LCDD6 */ 12. at91_set_A_periph(AT91_PIN_PB12, 0); /* LCDD7 */ 13. at91_set_A_periph(AT91_PIN_PB15, 0); /* LCDD10 */ 14. at91_set_A_periph(AT91_PIN_PB16, 0); /* LCDD11 */ 15. at91_set_A_periph(AT91_PIN_PB17, 0); /* LCDD12 */ 16. at91_set_A_periph(AT91_PIN_PB18, 0); /* LCDD13 */ 17. at91_set_A_periph(AT91_PIN_PB19, 0); /* LCDD14 */ 18. at91_set_A_periph(AT91_PIN_PB20, 0); /* LCDD15 */ 19. at91_set_B_periph(AT91_PIN_PB23, 0); /* LCDD18 */ 20. at91_set_B_periph(AT91_PIN_PB24, 0); /* LCDD19 */ 21. at91_set_B_periph(AT91_PIN_PB25, 0); /* LCDD20 */ 22. at91_set_B_periph(AT91_PIN_PB26, 0); /* LCDD21 */ 23. at91_set_B_periph(AT91_PIN_PB27, 0); /* LCDD22 */ 24. at91_set_B_periph(AT91_PIN_PB28, 0); /* LCDD23 */
下面为验证的结果:
经过我和我的搭档两天的合作,终于把这个问题解决了!接下来把linux-2.6.30移植到这款板子上来!