Skip to content

Instantly share code, notes, and snippets.

View betaEncoder's full-sized avatar
🐡
ふぐ

betaEncoder betaEncoder

🐡
ふぐ
View GitHub Profile
@betaEncoder
betaEncoder / interconversion.py
Last active May 29, 2020 09:08
interconversion between embedded types and binary
import struct
import ctypes
import array
# 16bit unsigned int to binary
uint16 = 0xff00
raw = array.array("B", struct.pack("<H", uint16)) # "<" means little-endian. ">" means big-endian
print(raw) # array('B', [0, 255])
# multible 16bit unsigned int to binary
@betaEncoder
betaEncoder / STM32_programming_tips.md
Last active September 22, 2020 15:03
Tips for STM32 self programming

STM32のFlashメモリを書き換える時のメモ

アプリケーションによっては,製品出荷時にユニークなIDを記憶させたり,キャリブレーション値を保持する時にMCU内蔵のEEPROMへデータを書き込む事があります.
しかしながら,STM32シリーズのチップにはEEPROMがありません.どうやらFlashメモリをEEPROMのように書き換えて使う想定のようです.

Flash特有の懸念

FLASHメモリと言えば書き換え可能な回数が限られており,頻繁な書き換えは信頼性の低下が懸念されます.
そこでデータシートを参照してみると,最低でも1万回の書き換えが保証されているようでした.   これならループを回して書き換えたりしない限り,メモリの劣化は考えなくても良さそうです.
懸念はそれだけではありません.Flashメモリは1バイトづつ書き込む事はできるものの,消去はセクタ単位での一括消去となります.故に,書き換える場合には以下の手順が必要です.

@betaEncoder
betaEncoder / main.c
Created December 19, 2016 19:04
motor sample 16motor
#include <project.h>
uint8 tick;
uint8 sin_table[] = {100,101,102,104,105,106,107,109,110,111,112,113,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,134,135,136,137,138,139,139,140,141,142,142,143,144,144,145,145,146,146,147,147,147,148,148,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,149,149,149,149,149,148,148,147,147,147,146,146,145,145,144,144,143,142,142,141,140,139,139,138,137,136,135,134,134,133,132,131,130,129,128,127,126,125,124,122,121,120,119,118,117,116,115,113,112,111,110,109,107,106,105,104,102,101,100,99,98,96,95,94,93,91,90,89,88,87,85,84,83,82,81,80,79,78,76,75,74,73,72,71,70,69,68,67,66,66,65,64,63,62,61,61,60,59,58,58,57,56,56,55,55,54,54,53,53,53,52,52,51,51,51,51,51,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,51,52,52,53,53,53,54,54,55,55,56,56,57,58,58,59,60,61,61,62,63,64,65,66,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82,83,84,85,87,88,89,90,91,93,94,95,96,98,99
};
void SysTick_Handler(){
tick++;
Control_Reg_1_Write(1);
C
@betaEncoder
betaEncoder / main.c
Created December 19, 2016 17:57
motor sample 1
#include <project.h>
uint8 tick;
uint8 sin_table[] = {100,101,102,104,105,106,107,109,110,111,112,113,115,116,117,118,119,120,121,122,124,125,126,127,128,129,130,131,132,133,134,134,135,136,137,138,139,139,140,141,142,142,143,144,144,145,145,146,146,147,147,147,148,148,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,149,149,149,149,149,148,148,147,147,147,146,146,145,145,144,144,143,142,142,141,140,139,139,138,137,136,135,134,134,133,132,131,130,129,128,127,126,125,124,122,121,120,119,118,117,116,115,113,112,111,110,109,107,106,105,104,102,101,100,99,98,96,95,94,93,91,90,89,88,87,85,84,83,82,81,80,79,78,76,75,74,73,72,71,70,69,68,67,66,66,65,64,63,62,61,61,60,59,58,58,57,56,56,55,55,54,54,53,53,53,52,52,51,51,51,51,51,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,51,52,52,53,53,53,54,54,55,55,56,56,57,58,58,59,60,61,61,62,63,64,65,66,66,67,68,69,70,71,72,73,74,75,76,78,79,80,81,82,83,84,85,87,88,89,90,91,93,94,95,96,98,99
};
void SysTick_Handler(){
tick++;
Control_Reg_1_Write(1);
C
@betaEncoder
betaEncoder / 構造体のパッキング
Created September 30, 2014 07:09
C#でwin32API等を呼び出す時に構造体をmarshal時にアンマネージド変数のようにパッキングしてもらう覚書き
using System.Runtime.InteropServices;
// 構造体の中身をきっちりパッキングする
[StructLayout(LayoutKind.Sequential)]
struct message
{
public byte foo;
public byte bar;
public uint16 boo;