як очистити масив в Embedded C

V

vishu489

Guest
Привіт, друзі, я не знаю, як очистити або видалити array.suppose я визначаю символ MSG масиву [300], і він буде зберігати дані whenener отримає переривання відбувається після цього ЖК-дисплей відображення цих даних і масив повинен бути очищений для зберігання наступної даних, що надходять від USART. хто може мені допомогти? кричати:
 
Я не знаю, як очистити або видалити array.suppose я визначаю символ MSG масиву [300], і він буде зберігати дані whenener отримає переривання відбувається після цього ЖК-дисплей відображення цих даних і масивів повинна бути очищений для зберігання наступної даних, що надходять від USART.
Який мікроконтроллер ви обрана для вашого дизайну? Який тип ЖК-ви маєте на увазі? Слід зазначити, що символьний масив з 300 байт можуть займати всі або більшу частину доступної оперативної пам'яті протягом багатьох мікроконтролерів. Масив, що розмір може перевищувати можливості відображення багатьох часто використовуваних дисплеїв. Доступних варіантів також може залежати від використовуваного компілятора. Хоча, якщо використовувати в якості постійного буфера з невеликим ретельного планування, масив символів, можливо, не повинні бути очищені або видалені. BigDog
 
Ви впевнені, що вам потрібно встановити весь буфер в нулі? Може бути, було б достатньо, щоб встановити деякі символ поєднання символів, який позначає кінець повідомлення? В іншому випадку ви можете використовувати 'MemSet "функції або зробити це в циклі.
 
З метою чіткого масиву ви повинні написати кожен байт окремо, не існує способу, щоб очистити його відразу, але в певному додатку, який ви хочете реалізувати можна використовувати обертові буфера. Ви потребуєте трьох індексів, де зберігати наступні дані, скільки зберігаються дані ще належить читати і читати положенні. Наприклад write_index, remaining_char_index, read_index Кожен раз, коли новий запис йде він почне писати в write_index позиції і збільшити його на одиницю для наступного запису, ви також збільшити remaining_char_index, так що ви знаєте, як багато символів зберігаються. Потім, коли ви виявили, що remaining_char_index> 0, то ви почнете читати з read_index і ви збільшити на одну позицію кожен раз, в той же час ви зменшуєте remaining_char_index і продовжуйте читання, поки в стає рівним 0. Ви також повинні перевірити, якщо ви знаходитеся в кінці масиву, так що ви можете переходити до 0, а також перевірити, якщо масив (буфер) має більш ніж 300 байтів, які очікують читання (remaining_char_index), тому що ви не хочете, щоб початку перезапису даних, яка не була прочитана Alex
 
Чому б вам не звернутися до наявних RTL процедури? Як вже говорилося, MemSet () є стандартною функцією для очищення пам'яті структур. Я також згоден, що це, швидше всього непотрібного, щоб очистити буфер повідомлень шляхом перезапису даних. Якщо це буфер рядка, вам потрібно всього лише написати один символ NULL. Якщо це буфер з assiocated покажчик (и), просто скинути останнього. Іншими словами, питання відноситься до відповідної конструкції структур даних.
 
Ви заповнення всіх 300 байт з одного запиту переривання? Якщо ні, то чому б вам не подумати про пов'язаному списку тип структури. Що дає вам більше гнучкості обробки пам'яті. Ви можете звільнити пам'ять після кожного байта доступу. Подумайте про це
 

Welcome to EDABoard.com

Sponsor

Back
Top