Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите переписать массив под IAR.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
skyled
Есть в исходнике для IAR вот такой код. Поскольку я в IAR не силен, подскажите как допускается его переписать в несколько строк чтоб по вертикали меньше места занимал? Неудобно исходник читать. Спасибо.
CODE
__flash int TVol[] = {
0 ,
21 ,
22 ,
23 ,
24 ,
25 ,
26 ,
27 ,
28 ,
29 ,
30 ,
31 ,
32 ,
33 ,
34 ,
35 ,
36 ,
37 ,
38 ,
39 ,
40 ,
41 ,
42 ,
43 ,
44 ,
45 ,
46 ,
47 ,
48 ,
49 ,
50 ,
51 ,
52 ,
53 ,
54 ,
55 ,
56 ,
57 ,
58 ,
59 ,
60 ,
61 ,
62 ,
63 ,
64 ,
65 ,
66 ,
67 ,
68 ,
69 ,
70 ,
71 ,
72 ,
74 ,
76 ,
79 ,
81 ,
83 ,
86 ,
89 ,
91 ,
94 ,
97 ,
100 ,
103 ,
106 ,
109 ,
112 ,
116 ,
119 ,
123 ,
126 ,
130 ,
134 ,
138 ,
142 ,
146 ,
151 ,
155 ,
160 ,
165 ,
170 ,
175 ,
180 ,
185 ,
191 ,
197 ,
203 ,
207 ,
211 ,
215 ,
219 ,
224 ,
228 ,
233 ,
237 ,
242 ,
247 ,
252 ,
257 ,
262 ,
267 ,
273 ,
278 ,
284 ,
289 ,
295 ,
301 ,
307 ,
313 ,
319 ,
326 ,
332 ,
339 ,
346 ,
353 ,
360 ,
367 ,
374 ,
382 ,
389 ,
397 ,
405 ,
409 ,
413 ,
417 ,
422 ,
426 ,
430 ,
434 ,
439 ,
443 ,
448 ,
452 ,
457 ,
461 ,
466 ,
470 ,
475 ,
480 ,
485 ,
489 ,
494 ,
499 ,
504 ,
509 ,
514 ,
520 ,
525 ,
530 ,
535 ,
541 ,
546 ,
552 ,
557 ,
563 ,
568 ,
574 ,
580 ,
586 ,
591 ,
597 ,
603 ,
609 ,
615 ,
622 ,
628 ,
634 ,
640 ,
647 ,
653 ,
660 ,
666 ,
673 ,
680 ,
687 ,
690 ,
693 ,
697 ,
700 ,
704 ,
707 ,
711 ,
715 ,
718 ,
722 ,
725 ,
729 ,
733 ,
736 ,
740 ,
744 ,
747 ,
751 ,
755 ,
759 ,
762 ,
766 ,
770 ,
774 ,
778 ,
782 ,
786 ,
789 ,
793 ,
797 ,
801 ,
805 ,
809 ,
813 ,
817 ,
822 ,
826 ,
830 ,
834 ,
838 ,
842 ,
847 ,
851 ,
855 ,
859 ,
864 ,
868 ,
872 ,
877 ,
881 ,
885 ,
890 ,
894 ,
899 ,
903 ,
908 ,
912 ,
917 ,
921 ,
926 ,
931 ,
935 ,
940 ,
945 ,
949 ,
954 ,
959 ,
964 ,
969 ,
973 ,
978 ,
983 ,
988 ,
993 ,
998 ,
1003 ,
1008 ,
1013 ,
1018 ,
1023 };

И еще. Вот так я включаю вочдог:
Код
  WDTCR |= 0x18;
  WDTCR = 0x1E;

А вот так сбрасываю в теле программы:
Код
   asm("WDR");

Это правильно?
azziz
так и писать. в одну строку или несколько:
__flash int TVol[] = {0, 21, 22,....
567, 568, ....};
mempfis_
Цитата
И еще. Вот так я включаю вочдог:
Код
  WDTCR |= 0x18;
  WDTCR = 0x1E;

А вот так сбрасываю в теле программы:
Код
   asm("WDR");

Это правильно?


Почему-бы не использовать названия битов регистров для читаемости исходников?
В IAR есть встроенные функции __watchdog_reset(), __disable_interrupt(), __enable_interrupt(), __sleep().
Также в IARе выключайте оптимизацию строкой #pragma optimize=none чтобы он не заоптимизировал процедуры работы со сторожевым таймером до нерабочего состояния

Пример кода для ATMega324

Код
/***************************************/
//включение wdt
#pragma optimize=none
void wdtOn(void)
{
  __disable_interrupt();
  __watchdog_reset();
  
  /* Start timed equence */
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  
  /* Set new prescaler(time-out) value = 64K cycles (~0.5 s) */
  WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
  
  
  /* Set new prescaler(time-out) value = 256K cycles (~2 s) */
  WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
}
/***************************************/

/***************************************/
//включение wdt
#pragma optimize=none
void wdtOff(void)
{
  __disable_interrupt();
  __watchdog_reset();
  
  /* Clear WDRF in MCUSR */
  MCUSR &= ~(1<<WDRF);
  
  /* Write logical one to WDCE and WDE */
  /* Keep old prescaler setting to prevent unintentional time-out */
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  
  /* Turn off WDT */
  WDTCSR = 0x00;
  __enable_interrupt();
}
/***************************************/

/***************************************/
//перезагрузка по сторожевому таймеру
#pragma optimize=none
void wdtReboot(void)
{
  __watchdog_reset();
  //задержка на 100 мС
  delay_ms(100);
  
  //включаем сторожевой таймер
  wdtOn();
  
  while(1);
}
/***************************************/
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.