void rece_232()
{
int buffer[tam_buf],i=0;
buffer[i++]=getc();
for(i=0; i<8; i++)
{
byt0[i]=buffer[i];
}
for(i=8; i<16; i++)
{
byt1[i]=buffer[i];
}
for(i=16; i<24; i++)
{
byt2[i]=buffer[i];
}
for(i=24; i<32; i++)
{
byt3[i]=buffer[i];
}
for(i=32; i<40; i++)
{
byt4[i]=buffer[i];
}
}
#INT_RDA
Interrupcio_recep232()
{
rb2=1;
rece_232();
}
#define tam_buf 40
#define tam_byt 8
int conta_byt=0,cont_sens,byt0[tam_byt],byt1[tam_byt],byt2[tam_byt],byt3[tam_byt],byt4[tam_byt];
int nombre_variable[x], esto me ocupa muchiiiisima memoria RAM, aunque tengo que decir que antes de usar esto ya me movia con un uso de la RAM entre el 75% y el 85%, a que puede deberse? Por si sirve de algo comentar que la función principal del programa (main) es muy corta y lo que hace es ir llamando a funciones que a la vez se llaman entre ellas y que se encuentran en diversos .c con sus respectivos .h (esto lo tengo que arreglar y linkar). Uso un 16F877A transmitiendo a 9600 baudios.#include <16F877A.h> //Capçalera del Pic utilitzat
#include <elecponic.h> //Capçalera del programa ppal
#include <pins16F877A.h> //Capçalera de definició dels pins del uC
#include <hardware.c> //Llibreria del mode de funcionament manual
#include <serie.c> //Llibreria del mode de funcionament Labview
#include <antirebots.c> //Llibreria del sistema antirebots
short labview=0,manual=0;
void main()
{
//fun_sensar();
rb1=1;
init(); //Inicialitza
while(1)
{
if(labview==1) //Selecció Labview
{
//fun_sensar();
}
if(manual==1) //Selecció Manual
{
hardware();
}
}
}
#nolist
#byte ADCON1=0x9F //Bits de configuració del conversor AD
#byte ADRESH=0x1E
#byte ADRESL=0x9E
#bit adcs1=0x1F.7
#bit adcs0=0x1F.6
#bit chs2=0x1F.5
#bit chs1=0x1F.4
#bit chs0=0x1F.3
#bit godone=0x1F.2
#bit adon=0x1F.0
#list
RAM used: 12 (7%) at main() level
24 (14%) worst case...pero en C como seria mas o menos el algoritmo o la instrucción? Y en el CCS existirà alguna función para ello.. hmmm....
...
#include "16f877a.h"
//Obligo al compilador a ubicar variables en esta posición de memoria
#locate resultado=0x50 //entero de 8 bits
#locate mult=0x51 //entero de 8 bits
void main()
{
int8 resultado=0;
int8 mult=12;
resultado=12*mult;
//ahora para poder ver en la simulación de vhdl el resultado pongo
//código en asm para pasar el valor a w
while(1)
{
#asm
movf 0x50,w
movf 0x51,w
#endasm
}
} 0x0000 : 0x3000 movlw 0x00
0x0001 : 0x008A movwf 0x0A
0x0002 : 0x282B goto 0x2B
0x0003 : 0x0000 nop
0x0004 : 0x01F7 clrf 0x77
0x0005 : 0x01F8 clrf 0x78
0x0006 : 0x0823 movf 0x23 , W
0x0007 : 0x1003 bcf 0x03 , 0
0x0008 : 0x1824 btfsc 0x24 , 0
0x0009 : 0x07F7 addwf 0x77 , F
0x000A : 0x0CF7 rrf 0x77 , F
0x000B : 0x0CF8 rrf 0x78 , F
0x000C : 0x18A4 btfsc 0x24 , 1
0x000D : 0x07F7 addwf 0x77 , F
0x000E : 0x0CF7 rrf 0x77 , F
0x000F : 0x0CF8 rrf 0x78 , F
0x0010 : 0x1924 btfsc 0x24 , 2
0x0011 : 0x07F7 addwf 0x77 , F
0x0012 : 0x0CF7 rrf 0x77 , F
0x0013 : 0x0CF8 rrf 0x78 , F
0x0014 : 0x19A4 btfsc 0x24 , 3
0x0015 : 0x07F7 addwf 0x77 , F
0x0016 : 0x0CF7 rrf 0x77 , F
0x0017 : 0x0CF8 rrf 0x78 , F
0x0018 : 0x1A24 btfsc 0x24 , 4
0x0019 : 0x07F7 addwf 0x77 , F
0x001A : 0x0CF7 rrf 0x77 , F
0x001B : 0x0CF8 rrf 0x78 , F
0x001C : 0x1AA4 btfsc 0x24 , 5
0x001D : 0x07F7 addwf 0x77 , F
0x001E : 0x0CF7 rrf 0x77 , F
0x001F : 0x0CF8 rrf 0x78 , F
0x0020 : 0x1B24 btfsc 0x24 , 6
0x0021 : 0x07F7 addwf 0x77 , F
0x0022 : 0x0CF7 rrf 0x77 , F
0x0023 : 0x0CF8 rrf 0x78 , F
0x0024 : 0x1BA4 btfsc 0x24 , 7
0x0025 : 0x07F7 addwf 0x77 , F
0x0026 : 0x0CF7 rrf 0x77 , F
0x0027 : 0x0CF8 rrf 0x78 , F
0x0028 : 0x118A bcf 0x0A , 3
0x0029 : 0x120A bcf 0x0A , 4
0x002A : 0x283D goto 0x3D
0x002B : 0x0184 clrf 0x04
0x002C : 0x301F movlw 0x1F
0x002D : 0x0583 andwf 0x03 , F
0x002E : 0x1683 bsf 0x03 , 5
0x002F : 0x141F bsf 0x1F , 0
0x0030 : 0x149F bsf 0x1F , 1
0x0031 : 0x151F bsf 0x1F , 2
0x0032 : 0x119F bcf 0x1F , 3
0x0033 : 0x3007 movlw 0x07
0x0034 : 0x009C movwf 0x1C
0x0035 : 0x1283 bcf 0x03 , 5
0x0036 : 0x01A1 clrf 0x21
0x0037 : 0x300C movlw 0x0C
0x0038 : 0x00A2 movwf 0x22
0x0039 : 0x00A3 movwf 0x23
0x003A : 0x0822 movf 0x22 , W
0x003B : 0x00A4 movwf 0x24
0x003C : 0x2804 goto 0x04
0x003D : 0x0878 movf 0x78 , W
0x003E : 0x00A1 movwf 0x21
0x003F : 0x0850 movf 0x50 , W
0x0040 : 0x0851 movf 0x51 , W
0x0041 : 0x283F goto 0x3F
0x0042 : 0x0063 sleep
0x0043 : 0x3FFF Data 0x3FFF ; ?
0x0044 : 0x3FFF Data 0x3FFF ; ?
...supongo que lo unico a tener en cuenta es que esto deberas hacerlo con todas las variables o con ninguna para evitar machacar las que almacena el CCS con las que almacenas tu diciendole exactamente donde la quieres, no? A parte de eso esta el tema que comentas, de la longitud del array, al estar fracccionada la memoria en bancos, hay que ir con cuidadin..
...
Creo que locate sirve para proteger direcciones de memoria para que ccs no las toque para nada. ...
...
void main()
{
resultado=0;
mult=12;
...
.................... resultado=0;
0036: BCF 03.5
0037: CLRF 50
.................... mult=12;
0038: MOVLW 0C
0039: MOVWF 51
....................
.................... resultado=12*mult;
003A: MOVWF 21
003B: MOVF 51,W
003C: MOVWF 22
003D: GOTO 004
003E: MOVF 78,W
003F: MOVWF 50
....................
.................... //ahora para poder ver en la simulación de vhdl el resultado pongo
.................... //código en asm para pasar el valor a w
.................... while(1)
.................... {
.................... #asm
.................... movf 0x50,w
0040: MOVF 50,W
.................... movf 0x51,w
0041: MOVF 51,W
.................... #endasm
Hola gente del foro! Tengo el mismo problema, me dice not enough RAM for all variables, pero el tema es que necesito guardar en el micro una tabla de 24x48 Bytes, o sea 1152 bytes. Trate haciendo: Tabla [fila][columna] Pero me aparece el mismo error, trate haciendo 4 arrays de 255 y 1 de 132 y tambien. No hay forma de que guarde toda esa cantidad de bytes en la memoria del micro?
Gracias!
Hola gente del foro! Tengo el mismo problema, me dice not enough RAM for all variables, pero el tema es que necesito guardar en el micro una tabla de 24x48 Bytes, o sea 1152 bytes. Trate haciendo: Tabla [fila][columna] Pero me aparece el mismo error, trate haciendo 4 arrays de 255 y 1 de 132 y tambien. No hay forma de que guarde toda esa cantidad de bytes en la memoria del micro?
Gracias!
Si la tabla contiene sólo valores estáticos, prepactados que no cambian, agregá el modificador const para que se ubique en ROM, en lugar de la RAM.
Hola gente del foro! Tengo el mismo problema, me dice not enough RAM for all variables, pero el tema es que necesito guardar en el micro una tabla de 24x48 Bytes, o sea 1152 bytes. Trate haciendo: Tabla [fila][columna] Pero me aparece el mismo error, trate haciendo 4 arrays de 255 y 1 de 132 y tambien. No hay forma de que guarde toda esa cantidad de bytes en la memoria del micro?
Gracias!
Si la tabla contiene sólo valores estáticos, prepactados que no cambian, agregá el modificador const para que se ubique en ROM, en lugar de la RAM.