Skip to main content

Day 18: Dynamic Memory Allocation | Bluetooth

Lab

Background Info/Notes

  • Standardized protocol for sending/receiving data via 2.4GHz wireless link
  • Good for short-range, low-power, low-cost, wireless transmissions

How it Works

  • Use master/slave model
    • Master can send and request data from slaves
    • Slaves can only transmit to and receive from master
      • Can't talk to other slaves
  • Addresses and Names
    • Each device has unique 48-bit address
That's all theoretical. No matter what I did, I couldn't get the bluetooth to connect to my laptop. I tried resetting stuff, restarting my computer, using different code, using different hardware, nothing worked. I even took my laptop outside to try to connect it, but it simply wouldn't connect. 

Software: Dynamic Memory Allocation

Dynamic memory allocation allows for allocation of memory when program is executed instead of when it is compiled. Especially important when program uses array whose size is not determined until program is executed.

It is specified with either malloc or calloc function, which stand for "memory allocation" or "cleared allocation" and both reserve group of memory locations.

My cipher project from a previous homework assignment used dynamic memory allocation, so that it could reallocate memory according to the length of the user input.

Code:
#ifndef _CIPHERH_
#define _CIPHERH_

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *getInput(void)
{
  int mem=16; 
  char *message=malloc(mem); //Preallocate memory
  printf("Input Message\n");
fgets(message,mem,stdin); //Take user input 

while(message[strlen(message)-1]!='\n') //Check if there's still space
{
mem*=2; 
message=realloc(message,mem); //Double amount of space
fgets(message + mem/2 - 1, mem/2 + 1, stdin); //Read the rest of the line
}
return message; //return character array message
}

int EncryptMessage(void)
{
  char *message=getInput(); //call getInput function
  int ch; //initialize variable ch
  
  int shift; //initialize variable shift
  
  printf("\nInput number of characters to shift: \n");
  scanf("%i",&shift); //ask user to choose shift for encryption
  
  char newarray[strlen(message)]; //initialize array that is the same length as the message to be encrypted
  
  for(int k=0; k<=strlen(message); k++)
  {
    ch=*(message+k); //set ch equal to the current value in the array
    if(ch>='a' && ch<='z')
    {
      ch=ch+shift; //encrypt letter
      if(ch>'z')
      {
        ch=ch-26; //if the value goes past z, subtract 26
      }
      if(ch<'a')
      {
        ch=ch+26; //if value goes past a, add 26;
      }
      newarray[k]=ch; //write new value into array
    }
    
    if(ch>='A' && ch<='Z')
    {
      ch=ch+shift;
      if(ch>'Z')
      {
        ch=ch-26;
      }
      if(ch<'A')
      {
        ch=ch+26;
      }
      newarray[k]=ch;
    }
    
    else
    {
      newarray[k]=ch; //ignore non-letters
      continue; //continue
    }
  }
  printf("Encrypted Message: \n %s\n",newarray); //print encrypted message
}

#endif

I used malloc to pre-allocate memory, and realloc to reallocate the memory. 

Comments

Popular posts from this blog

Day 20: Structures, Programming with Pointers

Lecture Structures Structure defines set of data, but individual parts do not have to be the same type. Example 1.1 struct hurricane {  char name[10];  int year,category; }; Within a structure, variables and even arrays can be defined. Structures are also known as aggregate data types since multiple data values can be collected into a single data type. Individual values within a structure are called data members, and each member is given a name. In Example 1.1, the names of the data members are name, year, and category. To refer to a data member, the structure variable name followed by a period and a data member name is used.  Definition and Initialization Define structure. Keyword struct used to define name of structure (aka structure tag) and data members that are included in structure After structure defined, structure variables can be defined using declaration statements. Semicolon required after structure definition. Statements can appear before m...

Day 6: Analog Sensors | Functions and Modularity

Functions Functions are sets of statements that typically perform operation or compute value. They can help to make programs more accessible and usable for non-programmers e.g. create function that allows user to type "go forward" and move a robot forward. Modules -Functions can be split up into modules, "divide and conquer" -Each module has specific purpose, can be written and tested separately -Smaller than complete solution, therefore testing is easier -Can be used in new problem solutions without being retested -Reduces overall length of program -Allows for increased collaboration; modules can be worked on in parallel Debugging Longer Programs Use a compiler that gives meaningful information about errors. Adding comments around some sections of code can allow for better focus on other parts of the program. Test complicated functions by themselves. Programmer Defined Functions Execution of program always begins with main function. Additional ...

Day 3: Linear Interpolation, Mathematical Functions, and Arduino Buttons

Figure 1.1 Linear interpolation  assumes that a straight line joins two points f(a) and f(c), and that the value of f(b), where b lies between a and c, lies on this line. Figure 1.2 Cubic spline interpolation  is when the points f(a) and f(c) are joined by a cubic polynomial, and the value of f(b), a function of b, which lies between points a and c, lies on this curve. Formula Assumes a<b<c f(b)=f(a)+((b-a)/(c-a))[f(c)-f(a)] Example 1 The data was given, shown in Figure 1.1 at right. Figure 2.1 Example 2 In the example on the left, we used linear interpolation to find the freezing temperature of certain salinities of water. 1. Problem Statement Use linear interpolation to determine the freezing temperature of water with a certain salinity. 2. Input/Output Description Inputs: first salinity, second salinity, first freezing temperature, second freezing temperature, new salinity. Output: new freezing temperature 3. Hand Example See...