查看完整版本 : C pointer casting 問題

ghostkcleung 2018-8-30 10:56

下面段 code 係唔 work 嘅,

但我唔想嘥時間做 copy 動作,

有無可能?

 uint16_t data[256];

  for(int i=0; i<256;i++){

    data[i]=0xAABB;

  }

  uint8_t* buf=(uint8_t*)data;

  for ( int i = 0; i < 512; i++){

    cout << hex << buf[i] ;

  // 我想個 Output 係 aabbaabb...

  }

Susan﹏汪汪 2018-8-30 11:05

[code]#include <iostream>
using namespace std;

int main(void) {
       
    uint16_t data[256];
   
    for(int i=0; i<256; i++) {
        data[i]=0xAABB;
    }
   
    uint8_t* buf=(uint8_t*)data;
   
    for (int i = 0; i < 512; i++) {
        cout << hex << (int)buf[i];
    }
   
    return 0;
}
[/code]

Little endian 的platform uint16會反轉左

ghostkcleung 2018-8-30 11:08

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 11:05 AM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486469535&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]
#include
using namespace std;

int main(void) {
       
    uint16_t data[256];
   
    for(int i=0; i [/quote]

明白,即係無得搞,
除非自己 copy 。

ghostkcleung 2018-8-30 11:11

唔可以用呢個 方法,
因為我要成個 uint8_t[] pass 俾 function。

Susan﹏汪汪 2018-8-30 11:15

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 11:11 AM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486469830&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]
唔可以用呢個 方法,
因為我要成個 uint8_t[] pass 俾 function。 [/quote]
caller係電腦?電腦做copy速度好快

ghostkcleung 2018-8-30 11:34

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 11:15 AM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486470013&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

caller係電腦?電腦做copy速度好快 [/quote]

就係唔係電腦,
想直接泊落去,
不過如果唔得就唔勉強。

assembly.jc 2018-8-30 13:05

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 11:11 AM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=486469830&ptid=27679464][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]
唔可以用呢個 方法,
因為我要成個 uint8_t[] pass 俾 function。 [/quote]

scope 問題?
global 或 static variable,其他 function 都 access 到,需要 copy 嗎?

ghostkcleung 2018-8-30 15:57

[quote]原帖由 [i]assembly.jc[/i] 於 2018-8-30 01:05 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486476244&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


scope 問題?
global 或 static variable,其他 function 都 access 到,需要 copy 嗎? [/quote]

呢個 8bit array 係餵俾 output stream 食。我個 16bit array 要拆做 2 粒 8 bit,嫌動作太多。

ghostkcleung 2018-8-30 16:04

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 03:57 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486484965&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


呢個 8bit array 係餵俾 output stream 食。我個 16bit array 要拆做 2 粒 8 bit,嫌動作太多。 [/quote]

我買咗塊 ili9486 觸屏返嚟,竟然無 driver,佢俾嗰個啲 code 散收收,好唔舒服,所以自己重寫。

佢係用純 SPI 操作,我試過如果用 8bit array 一舊舊掟出去會快過逐粒掟,大約快十幾 %,對於咁慢嘅畫面嚟講都幾重要。

ghostkcleung 2018-8-30 16:09

呢塊衰嘢。
[url=https://www.waveshare.com/4inch-TFT-Touch-Shield.htm]https://www.waveshare.com/4inch-TFT-Touch-Shield.htm[/url]

然後我將佢裡面啲 code 勾返出嚟,implement 落去呢個 library 度。
[url=https://github.com/adafruit/Adafruit-GFX-Library]https://github.com/adafruit/Adafruit-GFX-Library[/url]

呢個 library 裡面嘅 interface,寫得比較好。用咗佢做 implement。

[url=https://drive.google.com/folderview?id=1IO_2BiV1zjq7M3bATbfpIz5Fe0uQPDRC]https://drive.google.com/folderview?id=1IO_2BiV1zjq7M3bATbfpIz5Fe0uQPDRC[/url]


(原來我唔識用 github,以為好容易)

[[i] 本帖最後由 ghostkcleung 於 2018-8-30 04:16 PM 編輯 [/i]]

Susan﹏汪汪 2018-8-30 16:22

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 04:09 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486485517&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]
呢塊衰嘢。
https://www.waveshare.com/4inch-TFT-Touch-Shield.htm

然後我將佢裡面啲 code 勾返出嚟,implement 落去呢個 library 度。
https://github.com/adafruit/Adafruit-GFX-Library

呢個 library 裡面嘅 interface,寫得比較好。用咗佢做 imp ... [/quote]
佢呢個字體

汪汪用自己的rasterizer都可以wor

ghostkcleung 2018-8-30 16:30

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 04:22 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=486486278&ptid=27679464][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]

佢呢個字體

汪汪用自己的rasterizer都可以wor [/quote]

唔識,呢啲簡單 mon 仔,只要畫到啲簡單嘢,寫到字,就當贏,速度係首要考慮。(佢 fill 個全畫面 rect 差不多要 0.8 秒。

Susan﹏汪汪 2018-8-30 16:40

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 04:30 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486486717&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


唔識,呢啲簡單 mon 仔,只要畫到啲簡單嘢,寫到字,就當贏,速度係首要考慮。(佢 fill 個全畫面 rect 差不多要 0.8 秒。 [/quote]
0.8秒畫480x320

如果畫一粒字母例如24x24應該唔太慢
唔知能唔能夠直頭放D scalable的字體資料
initial state alloc一塊memory預先做render

不過可能處理floating point會好慢

ghostkcleung 2018-8-30 16:52

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 04:40 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486487180&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

0.8秒畫480x320

如果畫一粒字母例如24x24應該唔太慢
唔知能唔能夠直頭放D scalable的字體資料
initial state alloc一塊memory預先做render

不過可能處理floating point會好慢 ... [/quote]

我睇過佢有段寫 canvas,
可以再 canvas 裡面搞好晒先至嘔落個畫面。
佢 default 處理字嘅方式,係逐隻字母做,首先 fill 咗個 background,然後逐粒 pixel 畫落去。如果text size 大嘅話,
出一句字會好痛苦。呢樣嘢我諗緊做優化。

ghostkcleung 2018-8-30 16:56

你班 programmer 真係唔嘢少架喎,咁都睇得明做緊乜。

Susan﹏汪汪 2018-8-30 17:11

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 04:52 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486487877&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


我睇過佢有段寫 canvas,
可以再 canvas 裡面搞好晒先至嘔落個畫面。
佢 default 處理字嘅方式,係逐隻字母做,首先 fill 咗個 background,然後逐粒 pixel 畫落去。如果text size 大嘅話,
出一句字會好痛苦。呢樣嘢我諗緊做優化。 ... [/quote]
如果個時間夠stable
應該可以計到pixels fillrate

然後就可以預測不同形狀大小的時間

汪汪講的rasterize的方法係呢種
[url=https://medium.com/@evanwallace/easy-scalable-text-rendering-on-the-gpu-c3f4d782c5ac]https://medium.com/@evanwallace/easy-scalable-text-rendering-on-the-gpu-c3f4d782c5ac[/url]

字體的輪廓如果唔複雜
大概唔會有太多三角形、可能可以預先拆晒bezier curve做三角形出來放入去
就只需要就咁loop三角形就得
而且三角形坐標本身也可以做transformation

所以可以實時做scaling
不過係怕唔夠memory 做pre-rendering

ghostkcleung 2018-8-30 17:14

其實件事就係買咗呢塊爛鬼 mon 返嚟玩,點知無乜 driver 好用,呢一刻其實唔應該再嘥時間,直接掉落垃圾桶算。

淘寶加埋運費舊半水架喎,咪試吓寫吓囉,點知勞動到咁多專業人士…

ghostkcleung 2018-8-30 17:19

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 05:11 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486488840&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

如果個時間夠stable
應該可以計到pixels fillrate

然後就可以預測不同形狀大小的時間

汪汪講的rasterize的方法係呢種
[url]https://medium.com/@evanwallace/easy-scalable-text-rendering-on-the-gpu-c3f4d782c5ac[/url]

字體的輪廓如果唔複雜
大概唔會有太多三角形、可能可以預先拆晒bezier cu ... [/quote]

如果佢正常常出到隻字已經好勁,
夜啲返到去我影俾你睇佢出一句字係點樣慢慢 scan 出嚟。

Susan﹏汪汪 2018-8-30 17:30

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 05:19 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486489198&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


如果佢正常常出到隻字已經好勁,
夜啲返到去我影俾你睇佢出一句字係點樣慢慢 scan 出嚟。 [/quote]
汪汪係指program initial 未畫mon果時
預先render文字落一塊memory
然後真正畫mon果時就由memory copy pixel落frame buffer

只是簡單的用memory 換時間的手法

其實搞咁多野都係諗緊應該可以寫到任意font size的

ghostkcleung 2018-8-30 17:42

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 05:30 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486489831&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

汪汪係指program initial 未畫mon果時
預先render文字落一塊memory
然後真正畫mon果時就由memory copy pixel落frame buffer

只是簡單的用memory 換時間的手法

其實搞咁多野都係諗緊應該可以寫到任意font size的 ... [/quote]

我睇過你條 link,呢塊板應該唔夠力,
16mhz 無 fpu。

可能 raspberry pi 會做到,
不過如果玩 raspberry pi,
用 HDMI mon 啦。

Susan﹏汪汪 2018-8-30 17:46

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 05:42 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486490445&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


我睇過你條 link,呢塊板應該唔夠力,
16mhz 無 fpu。

可能 raspberry pi 會做到,
不過如果玩 raspberry pi,
用 HDMI mon 啦。 [/quote]
咁有D可惜

ghostkcleung 2018-8-30 17:47

我都係諗畫落 memory 嘅方向,
然後成個 String 畫落隻 mon,
就算快唔到,起碼縮短咗 transfer 時間,眼睇落去會順啲。

Susan﹏汪汪 2018-8-30 17:52

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 05:47 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486490693&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]
我都係諗畫落 memory 嘅方向,
然後成個 String 畫落隻 mon,
就算快唔到,起碼縮短咗 transfer 時間,眼睇落去會順啲。 [/quote]
話說

可唔可以預先準備好一堆memory 儲住字母的pixels
然後就當成sprite咁用

直接逐個字母的pixels data transfer 出去

[[i] 本帖最後由 Susan﹏汪汪 於 2018-8-30 05:53 PM 編輯 [/i]]

ghostkcleung 2018-8-30 18:15

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 05:52 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486490987&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

話說

可唔可以預先準備好一堆memory 儲住字母的pixels
然後就當成sprite咁用

直接逐個字母的pixels data transfer 出去 [/quote]

理論上係可以嘅,
我當你一堆可顯示嘅 ASCII 有 128 粒,
之後有幾種唔同 size(好似係 7 種),textSize 越大,pixel 越多,用 hard code 去做都唔係咁好睇。

呢隻 mon 仔嘅繪圖方式只有一種,
首先係 setWindow(x, y, w, h) 俾個範圍佢,然後 fill 一個 w*h 咁多格嘅 pixel 落去,畫乜都係得呢個方法架喇。

所以逢親遇到逐點畫嘅嘢就係最大鑊。

Susan﹏汪汪 2018-8-30 18:27

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 06:15 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486492195&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


理論上係可以嘅,
我當你一堆可顯示嘅 ASCII 有 128 粒,
之後有幾種唔同 size(好似係 7 種),textSize 越大,pixel 越多,用 hard code 去做都唔係咁好睇。

呢隻 mon 仔嘅繪圖方式只有一種,
首先係 setWindow(x, y, w, h) 俾個範圍佢,然後 fill 一個 w*h 咁多格嘅 pixel 落去,畫乜都係得呢個方法架喇 ... [/quote]
正常都會有setWindow呢個function
大把GUI library都最終離不開呢個function

汪汪見佢D字體其實都只不過係hardcode
[url=https://github.com/adafruit/Adafruit-GFX-Library/tree/master/Fonts]https://github.com/adafruit/Adafruit-GFX-Library/tree/master/Fonts[/url]

所以你自己hardcode落去都一樣結果

ghostkcleung 2018-8-30 18:40

[quote]原帖由 [i]Susan﹏汪汪[/i] 於 2018-8-30 06:27 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486492705&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]

正常都會有setWindow呢個function
大把GUI library都最終離不開呢個function

汪汪見佢D字體其實都只不過係hardcode
[url]https://github.com/adafruit/Adafruit-GFX-Library/tree/master/Fonts[/url]

所以你自己hardcode落去都一樣結果 ... [/quote]

嘩!你真係認真睇,佩服!
暫時睇都係擺落 memory,然後成塊貼係最快,不過咁做唔可以無 background,因為係成塊 rect 咁貼落去。

Susan﹏汪汪 2018-8-30 18:58

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 06:40 PM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486493365&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


嘩!你真係認真睇,佩服!
暫時睇都係擺落 memory,然後成塊貼係最快,不過咁做唔可以無 background,因為係成塊 rect 咁貼落去。 [/quote]
比起汪汪自己的graphic library
佢呢個只是小library

assembly.jc 2018-8-31 00:46

[quote]原帖由 [i]ghostkcleung[/i] 於 2018-8-30 03:57 PM 發表 [url=https://computer.discuss.com.hk/redirect.php?goto=findpost&pid=486484965&ptid=27679464][img]https://computer.discuss.com.hk/images/common/back.gif[/img][/url]


呢個 8bit array 係餵俾 output stream 食。我個 16bit array 要拆做 2 粒 8 bit,嫌動作太多。 [/quote]

array 裡面的 data 不會變吧? 如果係,咁 cast 左個 pointer 之後餵俾 output stream 食就可以,不是嗎? 何解要 copy 呢?

ghostkcleung 2018-8-31 02:15

[quote]原帖由 [i]assembly.jc[/i] 於 2018-8-31 12:46 AM 發表 [url=https://www.discuss.com.hk/redirect.php?goto=findpost&pid=486512114&ptid=27679464][img]https://www.discuss.com.hk/images/common/back.gif[/img][/url]


array 裡面的 data 不會變吧? 如果係,咁 cast 左個 pointer 之後餵俾 output stream 食就可以,不是嗎? 何解要 copy 呢? [/quote]

啱啱試咗,
好鬼怪,真係會變。

DSSCSS 2018-8-31 04:23

呢款LCD DRIVER有玩過,
用STM32F103, 行72MHZ, 無咁慢。

就好似呢條LINK用STM32F4 (只係ARM M4 ~160MHZ)+ILI9806 GEN PATTERN,
可以好快。
[url=https://www.youtube.com/watch?v=Bgy0boPQUq0]https://www.youtube.com/watch?v=Bgy0boPQUq0[/url]

1) FILL RECT可以AUTO INCREMENT
2) 字形就HARDCODE落去
3) 用FSMC方法黎ACCESS DATA (STM32 FSMC  LCD)
-----
1) 睇過段CODE,最好用PARALLEL INTERFACE ACCESS,ADAFRUIT那個LIBRARY用SPI,
速度上已經慢了不小。

2) 唔會用ARDUINO,只會用C DIRECT ACCESS REGISTER。
例如:FSMC READ WRITE LCD REGISTER類似咁寫:
[url=http://www.stmcu.org/module/forum/thread-615347-1-1.html]http://www.stmcu.org/module/forum/thread-615347-1-1.html[/url]

3) 用番粒快D 既32-BIT ARM MCU。
例如: STM32F429 > STM32F103

STM32既SPI,會咁寫:
[url=https://github.com/robots/STM32/blob/master/GPSTracker/modem/spi.c]https://github.com/robots/STM32/blob/master/GPSTracker/modem/spi.c[/url]

[[i] 本帖最後由 DSSCSS 於 2018-8-31 05:34 AM 編輯 [/i]]
頁: [1] 2 3
查看完整版本: C pointer casting 問題