![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Dec 2006
Bài gửi: 19
: |
Cảm ơn namqn tôi mới chỉ bắt đầu làm việc với PIC chừng 1 tháng nay nên còn rất nhiều điều cần phải học hỏi
1: Nói như bạn thì biết chắc là chẳng còn cách nào rồi. Những lệnh đó tôi cũng xem qua và nếu làm theo thì sẽ cần 1 bước để chuẩn bị dữ liệu (nạp vào chẳng hạn) chứ không thể chỉ bằng cách khai báo trực tiếp trong C 2: Nói như bạn nghĩa là cũng chưa có minh chứng gì cụ thể vì vậy mặc dù tôi cũng nghĩ giống bạn nhưng để chắc ăn chắc phải chỉnh lại để RAM cho còn nhiều chỗ trống hơn 3: Trang web bạn đưa giờ tôi mới biết rất cảm ơn bạn. Tôi cũng dùng bản mới nhất rồi nhưng cũng nhận thấy là yêu cầu của mình chắc nhà phát triển không đáp ứng được vì mỗi người khi sử dụng đến những hàm đó sẽ cần đến một sự chính xác khác nhau. Vì thế khi phát triển những hàm đó các nhà phát triển chỉ đi theo 1 con đường duy nhất là chính xác gần tuyệt đối và do đó hàm sin, cos, tan, ... tốn nhiều thời gian hơn những hàm tự phát triển 4: Sau 1 hồi tìm tòi tôi đã có hàm sqrt cực nhanh (tôi có chỉnh 1 chút cho phù hợp với dsPic Code:
inline short __attribute__((always_inline)) isqrt(unsigned long x) {static const unsigned char sqq_table[] ={ 0, 16, 22, 27, 32, 35, 39, 42, 45, 48, 50, 53, 55, 57, 59, 61, 64, 65, 67, 69, 71, 73, 75, 76, 78, 80, 81, 83, 84, 86, 87, 89, 90, 91, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 106, 107, 108, 109, 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155, 155, 156, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 178, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 189, 189, 190, 191, 192, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, 202, 203, 203, 204, 204, 205, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211, 212, 212, 213, 214, 214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 221, 221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227, 227, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255}; register unsigned long xn; if (x >= 0x10000) if (x >= 0x1000000) if (x >= 0x10000000) if (x >= 0x40000000) { if (x >= 65535UL*65535UL) return 65535; xn = sqq_table[x>>24] << 8; } else xn = sqq_table[x>>22] << 7; else if (x >= 0x4000000) xn = sqq_table[x>>20] << 6; else xn = sqq_table[x>>18] << 5; else { if (x >= 0x100000) if (x >= 0x400000) xn = sqq_table[x>>16] << 4; else xn = sqq_table[x>>14] << 3; else if (x >= 0x40000) xn = sqq_table[x>>12] << 2; else xn = sqq_table[x>>10] << 1; goto nr1; } else if (x >= 0x100) { if (x >= 0x1000) if (x >= 0x4000) xn = (sqq_table[x>>8] >> 0) + 1; else xn = (sqq_table[x>>6] >> 1) + 1; else if (x >= 0x400) xn = (sqq_table[x>>4] >> 2) + 1; else xn = (sqq_table[x>>2] >> 3) + 1; goto adj; } else return sqq_table[x] >> 4; /* Run two iterations of the standard convergence formula */ xn = (xn + 1 + __builtin_divud(x, xn)) >> 1; nr1: xn = (xn + 1 + __builtin_divud(x, xn)) >> 1; adj: if (__builtin_muluu(xn, xn) > x) /* Correct rounding if necessary */ xn--; return xn; } thay đổi nội dung bởi: namqn, 11-01-2009 lúc 06:51 AM. |
![]() |
![]() |
![]() |
|
|