我将开始一个项目,我需要对PIC单片机的汇编语言有一个很好的理解.我非常熟悉C/C++,所以我知道如何编写代码,我已经为PIC做了很多项目,所以我理解了这个架构,但是在'C'中完成了我的所有编程.
是否有一本好书或网站能够很好地解释所有汇编命令的含义以及如何为PIc微控制器执行相当简单的任务(闪烁LED,基本数学等等)?
编辑:这篇文章的主要目的是请求学习汇编的资源,而不是在PIC中讨论C与汇编的优点,或者PIC是否是一个"好"的微控制器.我使用的是PIC18单片机,如果这有任何区别的话.
我希望开始简单的硬件开发,并希望进步足以从逆向工程中学习.
我想从一个微控制器开始,并考虑一些,如Mbed和Arduino.我该怎么办?
我想也许是mbed,因为它有USB和以太网功能,还有其他几个,但我真的不知道Arduino有什么.公共汽车盗版(因为它更便宜)也会起作用吗?
我真的不想基本编程; 我目前的视差控制器很痛苦!
通常,在运行RTOS的SBC中,将数据/事件日志写入诸如SD卡的外部媒体是一件容易的事.然而,在使用微控制器的嵌入式系统中,例如PIC微芯片,具有有限的数据/程序存储器.虽然有些芯片组支持外部媒体,但假设没有,那么如何登录MCU呢?
我能想到的唯一可行的方法是将其写入MCU的EEPROM,但这是否可行?如果可以这样做,那么如何写和读?
我正在通过stm研究STM32l151rct6a,我偶然发现了这些MACRO定义
__CC_ARM, __ICCARM__, __GNUC__, __TASKING__
Run Code Online (Sandbox Code Playgroud)
有谁知道他们的意思?
我最近一直在尝试STM32-DISCOVERY,但我不确定什么是真正开始使用该板的应用程序的最佳方法.
我想在stm32的显示屏上显示RTC的时间.我一直在寻找很多教程,但我似乎找不到任何教程.
你们有没有想过开始这个的最佳方法是什么?我已经为STM32安装了库.
提前致谢.
我有一些非空构造函数的全局实例的简单声明.这些构造函数在启动期间自动调用.我在Linux上交叉编译C++到不同的微控制器目标.
至于
对构造函数的调用将放入该.init_array部分.地图文件如下所示:
.init_array 0x00007cb8 0x4 libmotor.o
.init_array 0x00007cbc 0x4 libaudio.o
至于
这些调用进入该.ctors部分:
.ctors 0x000000009d011508 0x4 libmotor.o
.ctors 0x000000009d01150c 0x4 libaudio.o
编译完成后-ffunction-sections -fdata-sections,链接器得到了--gc-sections.
所有二进制文件都可以工作,但我想将所有调用放在同一部分(以简化链接器脚本的维护).
我正在用C编写一个小型8位微控制器的软件.部分代码是读取电流互感器(ZCT)的ADC值,然后计算RMS值.流过ZCT的电流是正弦曲线但可能会失真.我的代码如下:
float adc_value, inst_current;
float acc_load_current; // accumulator = (I1*I1 + I2*I2 + ... + In*In)
double rms_current;
// Calculate the real instantanous value from the ADC reading
inst_current = (adc_value/1024)*2.5; // 10bit ADC, Voltage ref. 2.5V, so formula is: x=(adc/1024)*2.5V
// Update the RMS value with the new instananous value:
// Substract 1 sample from the accumulator (sample size is 512, so divide accumulator by 512 and substract it from the accumulator)
acc_load_current -= (acc_load_current / 512);
inst_current *= …Run Code Online (Sandbox Code Playgroud) 我正在32位cortex m4微控制器上编写函数.该函数必须能够乘以不同大小的矩阵,这是我无法预测的.所以我必须使用malloc ......
但我不明白为什么我的mc在执行以下行时总是进入默认处理程序中断:
double *output2=NULL;
output2 = malloc(3 *1* sizeof(double *));
Run Code Online (Sandbox Code Playgroud)
这个mc是不是能够处理这种类型的操作?虽然这在我的笔记本电脑上工作得很好!
**编辑*
这里有一些更多的代码(仍然需要修改......):好吧所有的malocs都失败了.我无法为"malloced"数组赋值.
int main (void)
{
/*some stuff*/
float transFRotMatrix[3][3]={0}; //array gets modified by other functions
float sunMeasurements[3][1] = {{1},{2},{3}}; //test values
multiplyMatrices( &transFRotMatrix[0][0],3, 3, &sunMeasurements[0][0], 3, 1, *orbitalSunVector);
/*some stuff*/
}
void multiplyMatrices(float *transposedMatrix, int height1, int width1, float *iSunVector,int height2, int width2, float *orbitalSunVector)
{
int y=0;
int x = 0;
int row=0;
int column =0;
int k=0;
int k2 = 0;
float result = …Run Code Online (Sandbox Code Playgroud) 我有一个在基于ARM Cortex-M的MCU上运行的应用程序,用C和C++编写.我使用gcc并g++编译它,并希望完全禁用任何堆使用.
在MCU启动文件中,堆大小已经设置为0.除此之外,我还想禁止在代码中使用任何意外的堆.
换句话说,我想接头(和/或编译器),以给我一个错误时malloc,calloc,free功能或new,new[],delete,delete[]运营商使用.
到目前为止,我已经尝试过-nostdlib这样的问题undefined reference to _start.我也尝试过,-nodefaultlibs但是当我试着打电话时,我仍然没有抱怨malloc.这样做的正确方法是什么?
笔记:
我正在编程STM32L051R8并有下一个问题.我大部分时间都在尝试使用待机模式,有时通过RTC唤醒,这是一个自动唤醒.如果我在没有睡觉的情况下工作 - 一切正常,我每次都会得到一个RTC中断,但是当我使用待机时 - 不要.
如果我使用待机,我的第一个周期很好:
但是第二个和下一个周期在进入待机状态后立即唤醒(3).