Швидко очистити масив
Меню навігації
Посилання користувача
інформація про користувача
Ви тут » Програмування ATMEL у BASCOM. » Питання - відповіді » Швидко очистити масив
Повідомлень 1 сторінка 30 з 30
Поділитися1 2013-03-08 14:29:15
- Автор: radan
- Адміністратор
- Звідки: Лисичанськ
- Зареєстрований: 2007-01-25
- Запрошень: 0
- Повідомлень: 1437
- Повага: [+216/-0]
- Позитив: [+112/-2]
- Стать: Чоловіча
- Вік: 48 [1970-03-27]
- Провів на форумі: 1 місяць 1 день
- Останній візит: Сьогодні 00:30:07
Потрібно швидко очистити масив. Роблю так:
Але так у конкретній ситуації повільно. Чи не ту можливість очистити однією командою? І ще, якщо можливості немає, як це написати на АСМе?
Поділитися2 2013-03-08 21:17:22
- Автор: sva-don
- Активний учасник
- Звідки: Ростов-на-Дону
- Зареєстрований: 2011-01-08
- Запрошень: 0
- Повідомлень: 533
- Повага: [+79/-5]
- Позитив: [+30/-8]
- Стать: Чоловіча
- Провів на форумі: 6 днів 8 годин
- Останній візит: Вчора 16:57:28
Поділитися3 2013-03-08 21:24:27
- Автор: dmm
- Активний учасник
- Зареєстрований: 2007-01-28
- Запрошень: 0
- Повідомлень: 323
- Повага: [+32/-2]
- Позитив: [+0/-0]
- Провів на форумі: 3 дні 7 годин
- Останній візит: 2015-06-15 20:35:32
'найшвидше, але довго (лінійна програма) $asm LDI R24 , 0 '0 Loadadr Picsel , X 'покажчик на початокмасиву в Z 'записати 128 разів St Z+ , R24 'записати 1 St Z+ , R24 'записати 2
. 'повторювати 3. 126
St,Z+ , R24 'записати 127 St,Z+ , R24 'записати 128 $end Asm
'удвічі повільніше, але коротко (з циклом) $asm LDI R24 , 0 '0 LDI R25 , 128 '128 Loadadr Picsel , X 'покажчик на початок масиву в Clar : St Z+ , R24 'записати 128 разів Dec R25 Brne Clar $end Asm
Поділитися4 2013-03-09 00:02:23
- Автор: radan
- Адміністратор
- Звідки: Лисичанськ
- Зареєстрований: 2007-01-25
- Запрошень: 0
- Повідомлень: 1437
- Повага: [+216/-0]
- Позитив: [+112/-2]
- Стать: Чоловіча
- Вік: 48 [1970-03-27]
- Провів на форумі: 1 місяць 1 день
- Останній візит: Сьогодні 00:30:07
Дякуємо! Проблема швидкодії важлива в багатьох випадках. Крім оптимізації алгоритму і переходу на ASM напевно є певні хитрощі, що дозволяють прискорити роботу програми. В основному це стосується математики. масиву даних, зробити певні перетворення, відправити в інший масив. Одна добра людина сформулювала кілька моментів прискорення швидкодії: 1) X=X+1 працює швидше, ніж Incr X 2) X=0 швидше, ніж Reset X. 3) Цикли For. Далі взагалі краще не застосовувати, якщо швидкість важлива. Можна спільними зусиллями зможемо продовжити список?
Поділитися5 2013-03-09 09:22:43
- Автор: demonizer
- Активний учасник

- Звідки: Sochi
- Зареєстрований: 2010-01-27
- Запрошень: 0
- Повідомлень: 317
- Повага: [+6/-0]
- Позитив:[+4/-0]
- Стать: Чоловіча
- Провів на форумі: 4 дні 14 годин
- Останній візит: 2018-04-20 08:27:29
Чи може бути спільними зусиллями зможемо продовжити список?
було б непогано
Поділитися6 2013-03-09 12:26:34
- Автор: RDW
- Активний учасник
- Звідки: Москва
- Зареєстрований: 2011-05-11
- Запрошень: 0
- Повідомлень: 2261
- Повага: [+138/-35]
- Позитив: [+65/-51]
- Стать: Чоловіча
- Провів на форумі: 17 днів 21 год
- Останній візит: Вчора 18:40:44
1) X=X+1 працює швидше, ніж Incr X
З цим незрозуміло, спірно, якщо компілятор правильно зроблено (оптимізація), то Incr 8-біт має швидше працювати і менше займати звичайній опірації додавання будь-яких чисел (адже для складання числа потрібно вказувати яке воно, а це ще такти процесора для зчитування даних ( як мінімум)). Взагалі компілятор повинен у будь-якому випадку оптимізувати ці два варіанти, галочка в опціях коштує?
2) X = 0 швидше, ніж Reset X.
За логікою швидше і економніше має виглядати рядок такого типу: X = X Xor X (треба звичайно пробувати, як воно там у реалі виглядає, ксор зазвичай 1 команда/такт). І взагалі, не забуваємо при ініціалізації використовувати заздалегідь відомі значення для інших змінних, наприклад зщна, що Х у нас дорівнює 0 (раніше встановили), то можна далі використовувати Y=X і т.д.
3) Цикли For. Далі взагалі краще не застосовувати, якщо швидкість важлива.
Тут з досвіду та відгуків в інеті можу сказати протилежне, бо на "do loop" народ дуже сильно скаржиться на стабільність роботи. У вихідному бесіці ці команди чужі (прийшли в пізніх версіях, GW-BASIC 1983). Рекомендують нимине користуватися.
Взагалі ті люди, хто користуються баском, повинні чітко розуміти, що за гнучкість, зручність та швидкість треба платити продуктивністю і тут головне лише одне – надійність. Ясний пень, що якщо потрібна продуктивність і економія пам'яті, то простіше в тому ж баском кодити на асмі спочатку, робити рідкісні вставки на бейсику (який зворотний изврат). і так вже обговорювалося/відомо) саме надійність і правила як треба робити (він у перетворенні типів скільки косяків можна допустити в одній математиці..).