블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

C#에 매크로 기능이 없어, 디버깅코드를 모두 사용후 주석처리하고 있어, 불편하다.

C#에 inline 기능이 있나?
=>없다

C#에 매크로 기능이 있나?
=>있긴한데, 별로다.
static void Example() {
  Func add = (x,y) => x + y;
  var result = add(4,6);  // 10
}

C#에 포인터가 있나?
=>없다. 인덱스를 활용해라.
 ref 키워드가 있다.함수로 큰 데이터를 넘길떄 사용해라.

C#에 함수에 큰 데이터를 전달할떄 사용할 수 있는 포인터가 있나?
=>ref 키워드 있음.
Call by reference
ref는 호출하는 함수에도 붙여주어야 한다.
큰 데이터를 그냥 전달하면, 복사가 되어, 느려진다.
ref키워드를 붙여서, 빠르게 사용하자.
예)
void xx(ref byte[] buf,int len)
{
	...
}

void main_func()
{
	byte[] buf=new byte[32];
	xx(ref buf,32);
	...
}


포인터 기능이 있지만, 컴파일 옵션을 설정해주어야해서, 불편.
포인터 기능을 사용하지 않으려면, 처음부터 클래스나 데이터를 배열을 만들고,
배열의 인덱스를 포인터처럼 사용하면 된다.



warning CS0169: 'xx' 필드가 사용되지 않았습니다.
=>주석처리했더니, 다른데서 사용하고 있네...

오류	CS1656	'메서드 그룹'인 'xx'에는 할당할 수 없습니다.
=>이름이 xx인 것이 이미 존재하는 경우. 예) 버튼 이름이 xx인경우, xx함수 작성시 발생


byte 배열에 대한 strchr
private int strchr(byte[] a,byte find)
{
    int i,n=a.Length;
    for(i=0;i> (32 - nbit);
    ret = v >> Low_bit;
    return ret & mask;
}
void SetBits32HL(ref UInt32 v, int High_bit, int Low_bit, UInt32 new_value)
{
    int nbit = High_bit - Low_bit + 1;
    UInt32 ret, mask;
    mask = 0xFFFFFFFF >> (32 - nbit);
    new_value = new_value & mask;
    v= v & ~(mask<< Low_bit);
    v = v | (new_value<< Low_bit);

#if DEBUG
    int err = 0;
    if(GetBits32HL(v, High_bit, Low_bit)== new_value)
    {
        err = 0;
    }
    else
    {
        err = 1;
        MessageBox_Show("ERR: SetBits32HL");
    }
#endif
}
UInt32 GetByteBuf_WORD_LSB_HL(ref byte[] buf,int n, int nth_WORD,int High_bit, int Low_bit)
{
    UInt32 a;
    int i;
    i = nth_WORD * 2;
    a = (((UInt32)(buf[i+1]))<<8)|buf[i];//LSB
    return GetBits32HL(a, High_bit, Low_bit);
}
UInt32 GetByteBuf_DWORD_LSB_HL(ref byte[] buf, int n, int nth_WORD, int High_bit, int Low_bit)
{
    UInt32 a;
    int i;
    i = nth_WORD * 2;
    //확인필요-=-=-
    a = (((UInt32)(buf[i + 24])) << 8) | (((UInt32)(buf[i + 2])) << 16) | (((UInt32)(buf[i + 1])) << 8) | buf[i];//LSB
    return GetBits32HL(a, High_bit, Low_bit);
}
void SetByteBuf_WORD_LSB_HL(ref byte[] buf, int n, int nth_WORD, int High_bit, int Low_bit, UInt32 new_value)
{
    UInt32 a;
    int i;
    i = nth_WORD * 2;
    a = (((UInt32)(buf[i + 1])) << 8) | buf[i];//LSB
    SetBits32HL(ref a, High_bit, Low_bit, new_value);
    buf[i + 1] = (byte)(a >> 8);
    buf[i] = (byte)a;
#if DEBUG
    int err = 0;
    if (GetByteBuf_WORD_LSB_HL(ref buf, n, nth_WORD,High_bit, Low_bit) == new_value)
    {
        err = 0;
    }
    else
    {
        err = 1;
        MessageBox_Show("ERR: SetBits32HL");
    }
#endif
}
void SetByteBuf_DWORD_LSB_HL(ref byte[] buf, int n, int nth_WORD, int High_bit, int Low_bit, UInt32 new_value)
{
    UInt32 a;
    int i;
    i = nth_WORD * 2;
    //확인필요-=-=-
    a = (((UInt32)(buf[i + 3])) << 24) | (((UInt32)(buf[i + 2])) << 16) | (((UInt32)(buf[i + 1])) << 8) | buf[i];//LSB
    SetBits32HL(ref a, High_bit, Low_bit, new_value);
    buf[i + 3] = (byte)(a >> 24);
    buf[i + 2] = (byte)(a >> 16);
    buf[i + 1] = (byte)(a >> 8);
    buf[i] = (byte)a;
#if DEBUG
    int err = 0;
    if (GetByteBuf_WORD_LSB_HL(ref buf, n, nth_WORD, High_bit, Low_bit) == new_value)
    {
        err = 0;
    }
    else
    {
        err = 1;
        MessageBox_Show("ERR: SetBits32HL");
    }
#endif
}




error CS0120: 비정적 필드, 메서드 또는 속성 'xx()'에 개체 참조가 필요합니다.
=> static 추가




C#을 사용해보니, 느리다.
자바와 거의 유사하기떄문에, 뭘하든간에, 하나하나 동작이 다 느리다.

비트필드를 지원하지 않아서,
struct같은 구조체를 많이 사용하는 경우에는 C#으로 작업하는것이 힘들 수 있다.






class PortDataReceived
{
	...
	public static void Main()
	{
		...
	}
};



구조체
public struct Coords
{
    public Coords(double x, double y)
    {
        X = x;
        Y = y;
    }

    public double X { get; }
    public double Y { get; }

    public override string ToString() => $"({X}, {Y})";
}

비트필드 : 지원하지 않음,

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함