[En-Nut-Discussion] PPP/memory problem
Alain M.
alainm at pobox.com
Mon Oct 22 22:15:03 CEST 2007
Could this be incorporated in main version, I intend to use PPP too!!!
thanks,
Alain
Brett Abbott escreveu:
> Daniel
>
> I have an extended sample app developed for nutos/PPP which didnt make
> it into the released code base for some reason. This addresses a number
> of bugs and gives some examples for some of the stuff you are trying to
> do. You might be able to use it to cross check your own code.
>
> Drop me a note directly with your email address if you are interested.
>
> Cheers
> Brett
>
> Michael Müller wrote:
>> Hi,
>>
>> I also experience the same problem running the PPP stack. There seems to
>> be a magic barrier of about 10kB free heap space. If the system
>> (standard Ethernut 1.3 NutOS 4.3.x) under-runs this amount of free
>> memory it becomes instable and crashes immediately. As it happens just
>> with the first dial in and not after many dial processes the memory leak
>> seems to be a different trouble maker.
>>
>> Kind regards
>> Michael
>>
>>
>> p3stk4 schrieb:
>>
>>> Welcome,
>>>
>>> I'm writting a program for device which has to connect via GPRS modem
>>> send (MC35i) and some information to the server. Everything was good
>>> until program become bigger. Than I've noticed a problem with PPP
>>> driver. Without any reason it cannot establish connection (modem says
>>> ERROR/OK) or device hangup or restart.
>>> It seams to be a memory - like problem, because sometimes the
>>> configuration structure in the memory is overwritten with some data.
>>>
>>> How can I solve this problem?
>>>
>>> The device is:
>>> ATmega128 + 64 KB sram memory (3 wait states, one block)
>>> One RS232
>>> and nothing more.
>>>
>>> Configuration file used to build Nut/OS:
>>>
>>> PLATFORM = "ETHERNUT1"
>>> AVR_GCC = ""
>>> MCU_ATMEGA128 = ""
>>> NUTMEM_START = "0x100"
>>> NUTMEM_RESERVED = "64"
>>> NUTXMEM_SIZE = "0xEE00"
>>> NUTXMEM_START = "0x1100"
>>> NUT_CPU_FREQ = "16000000"
>>>
>>> Software:
>>> avr-gcc 4.2.1-1
>>> avr-libc 1.4.5-2
>>> binutils-avr 2.17
>>> Nut/OS 4.4.0.0
>>> Ubuntu Gutsy Gibbon RC
>>>
>>>
>>>
>>>
>>> The main below.
>>> Regards,
>>> Daniel Lewandowski
>>>
>>>
>>>
>>> /*
>>> * open modem as uart device
>>> */
>>> int modem_open (void)
>>> {
>>> u_long lctl;
>>> char buffer[64];
>>>
>>> strcpy_P(buffer, PSTR("ppp:" PPPCOM "/"));
>>> strncat(buffer, config->pppuser, PPPUSER_MAX);
>>> strcat_P(buffer, PSTR("/"));
>>> strncat(buffer, config->ppppass, PPPPASS_MAX);
>>>
>>> uart = _open(buffer, _O_RDWR | _O_BINARY);
>>> if (uart == -1) {
>>> return -1;
>>> }
>>>
>>> lctl = UARTSPEED;
>>> _ioctl(uart, UART_SETSPEED, &lctl);
>>>
>>> lctl = 1;
>>> _ioctl(uart, UART_SETRAWMODE, &lctl);
>>>
>>> modem_rxto(UARTFSTRXTO);
>>>
>>> _ioctl(uart, HDLC_SETIFNET, 0);
>>> NutSleep(2000);
>>>
>>> return 0;
>>> }
>>>
>>>
>>> /*
>>> * close raw uart
>>> */
>>> int modem_close(void)
>>> {
>>> return _close(uart);
>>> }
>>>
>>>
>>> /*
>>> * make a gprs connection active
>>> */
>>> int modem_gprs_open(void)
>>> {
>>> int rc;
>>> u_long lctl;
>>> char buffer[256];
>>>
>>> lctl = 0;
>>> _ioctl(uart, UART_SETRAWMODE, &lctl);
>>>
>>> strcpy_P(buffer, PSTR("TIMEOUT 30"
>>> " ABORT ERROR"
>>> " ABORT 'NO CARRIER'"
>>> " ABORT 'NO DIALTONE'"
>>> " '' ATH OK AT&D1 OK"
>>> " AT+CGDCONT=1,\"IP\",\""));
>>> strncat(buffer, config->pppapn, PPPAPN_MAX);
>>> strcat_P(buffer, PSTR("\" OK ATD*99***1# CONNECT"));
>>>
>>> rc = NutChat(uart, buffer);
>>> return rc;
>>> }
>>>
>>>
>>> int modem_gprs_close(void)
>>> {
>>> int rc = 0;
>>> u_long lctl;
>>>
>>> _ioctl(uart, HDLC_SETIFNET, 0);
>>> NutSleep(2000);
>>>
>>> MODEM_PORT &= ~_BV(MODEM_DTR); // DTR low
>>>
>>> lctl = 1;
>>> _ioctl(uart, UART_SETRAWMODE, &lctl);
>>>
>>> NutSleep(3000);
>>>
>>>
>>> MODEM_PORT |= _BV(MODEM_DTR); // DTR high
>>> NutSleep(500);
>>>
>>>
>>> return rc;
>>> }
>>>
>>>
>>> /*
>>> * create request frame
>>> */
>>> static void modem_frame_request(char *buffer);
>>> static void modem_frame_alarm(char *buffer);
>>> static void modem_frame_logged(char *buffer);
>>> static void modem_frame_keepalive(char *buffer);
>>>
>>> static int send_data(u_long ip, u_short port, void *data, u_short bytes)
>>> {
>>> int rc;
>>> u_char *msg = (u_char*)data;
>>> u_long sock_to = 5000;
>>> TCPSOCKET *const sock = NutTcpCreateSocket();
>>>
>>> if (sock == NULL) {
>>> return -1;
>>> }
>>>
>>> NutTcpSetSockOpt(sock, SO_RCVTIMEO, &sock_to, sizeof(sock_to));
>>> NutTcpSetSockOpt(sock, SO_SNDTIMEO, &sock_to, sizeof(sock_to));
>>>
>>> rc = NutTcpConnect(sock, ip, port);
>>> if (rc == 0) {
>>> while(bytes > 0) {
>>> rc = NutTcpSend(sock, msg, bytes);
>>> if (rc > 0) {
>>> bytes -= rc;
>>> msg += rc;
>>> }
>>> else if (rc == 0) {
>>> break;
>>> }
>>> else {
>>> break;
>>> }
>>> }
>>> }
>>>
>>> rc = NutTcpCloseSocket(sock);
>>> if (rc) {
>>> return -1;
>>> }
>>>
>>> return 0;
>>> }
>>>
>>>
>>> /*
>>> * send string message to the server
>>> */
>>> static int send_msg(u_long ip, u_short port, char *msg)
>>> {
>>> return send_data(ip, port, msg, strlen(msg));
>>> }
>>>
>>>
>>>
>>> char buffer[64];
>>>
>>> /*
>>> * main loop
>>> */
>>> int main (void)
>>> {
>>> DEVICE_STATE state;
>>> int rc;
>>>
>>> u_char alarm_phone_index = 0;
>>> u_long interval = 0;
>>> u_long next_slot = 0;
>>> PPPDCB *dcb;
>>>
>>> state = INITIALIZE;
>>>
>>> for(;;) {
>>> NutSleep(0);
>>> watchdog_clear();
>>> switch (state) {
>>> case INITIALIZE:
>>> config_init();
>>> adc_init();
>>> leds_init();
>>> amplifier_init();
>>> buttons_init();
>>> modem_init();
>>>
>>> modem_open();
>>> modem_ignite();
>>> state = IDLE;
>>>
>>>
>>> case IDLE:
>>> state = READ_SMS;
>>> break;
>>>
>>>
>>> case OPEN_GPRS:
>>> NutNetIfConfig("ppp", 0, 0, 0);
>>> dcb = devPpp.dev_dcb;
>>> NutDnsConfig2(0, 0, dcb->dcb_ip_dns1, dcb->dcb_ip_dns2);
>>> NutIpRouteAdd(0, 0, dcb->dcb_remote_ip, &devPpp);
>>>
>>> state = WORKING;
>>> break;
>>>
>>>
>>> case CLOSE_GPRS:
>>> modem_gprs_close();
>>> state = IDLE;
>>> break;
>>>
>>>
>>> case WORKING:
>>> ...
>>> break;
>>> }
>>> }
>>>
>>> return 0;
>>> }
>>>
>>>
>>> _______________________________________________
>>> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
>>>
>>>
>>
>> _______________________________________________
>> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
>>
>>
>>
>
More information about the En-Nut-Discussion
mailing list