重工电子论坛

标题: 开个贴,不定时更新对单片机编程的理解 [打印本页]

作者: 张金权-11级电子    时间: 2016-3-23 10:01
标题: 开个贴,不定时更新对单片机编程的理解
发现在群里交流的很多,上论坛交流的人还是少啊,来论坛里水的人更少。
作者: 程浥    时间: 2016-3-25 10:01

作者: 张金权-11级电子    时间: 2016-3-25 18:29
程浥 发表于 2016-3-25 10:01

哈哈,会写的,
作者: 张金权-11级电子    时间: 2016-3-25 18:35
好吧,先问几个问题:
1、要实现远程在线升级程序,先通过无线通信把bin文件发到单片机上,单片机再将其存在SD卡上,上电复位的时候,单片机再检查SD卡是否存在需要的bin文件,更新程序,这个思路可行不?如果可行,主要需要做哪些工作?
2、要实现IAP更新程序的功能,似乎需要写一个Bootloder程序,这个程序与STM32启动文件的区别?
3、如何实现通过PC上的USB接口直接读SD卡里面的文件?硬件上USB接口通过一个USB转串口芯片接单片机串口。
作者: 13-测控-张进科    时间: 2016-3-26 00:12
1、完全可行,要做的有:
    1)在Bootloader中将内存卡内的bin文件通过IAP写入STM32内部的Flash
    2)在Bootloader中初始化APP堆栈指针
    3)跳转到APP
    4)在APP中设置中断向量表的偏移量
2、STM32的启动文件主要是分配堆栈、设置中断向量表、初始化内部寄存器、跳转到main函数等,而Bootloader的作用是引导单片机运行到APP以及更新APP部分的代码
3、通过串口连接到电脑不能实现PC机的资源管理器直接管理STM32端的SD卡文件,但是可以通过串口将SD卡内指定文件的数据传到PC机,PC机通过上位机接收,然后做其他处理
作者: 张金权-11级电子    时间: 2016-3-28 11:43
13-测控-张进科 发表于 2016-3-26 00:12
1、完全可行,要做的有:
    1)在Bootloader中将内存卡内的bin文件通过IAP写入STM32内部的Flash
    2) ...

有道理,升级功能我会尝试实现。第三点,通过USB线连接到板子上面,在PC端直接打开SD卡内的文件查看,是否可行?
作者: 张金权-11级电子    时间: 2016-3-28 11:51
再来讨论一个问题,单片机和嵌入式的区别?由于嵌入式这个概念比较模糊,并没有一个准确的定义,有些人认为,运行了操作系统的才属于嵌入式,有些人认为,MCU/DSP/FPGA都属于嵌入式,那么嵌入式究竟是个什么含义?
作者: 张金权-11级电子    时间: 2016-3-28 12:05
张金权-11级电子 发表于 2016-3-28 11:51
再来讨论一个问题,单片机和嵌入式的区别?由于嵌入式这个概念比较模糊,并没有一个准确的定义,有些人认为 ...

看了:“关于嵌入式系统--献给热爱此道的初学者们”这篇文章,按照这篇文章的理解,从硬件上来讲,现在的单片机的片上外设如串口,ADC,比较器等都属于把一些IC具备的功能集成到了单芯片的处理器上,那么很多单片机就是嵌入式产品,从软件上来讲,就是把应用程序嵌入到了操作系统的内核程序中,那么就是跑了OS的单片机才属于嵌入式。
作者: 张金权-11级电子    时间: 2016-3-28 12:08
张金权-11级电子 发表于 2016-3-28 12:05
看了:“关于嵌入式系统--献给热爱此道的初学者们”这篇文章,按照这篇文章的理解,从硬件上来讲,现在 ...

综上,就是从比较宽泛的概念上来讲,单片机就是嵌入式,同时结合硬件和软件的定义上来讲,跑了OS的单片机才属于嵌入式。大家继续发表高见啊。
作者: 张金权-11级电子    时间: 2016-3-28 12:08
张金权-11级电子 发表于 2016-3-28 12:08
综上,就是从比较宽泛的概念上来讲,单片机就是嵌入式,同时结合硬件和软件的定义上来讲,跑了OS的单片机 ...

期待其他理解和阐释,,,
作者: 张金权-11级电子    时间: 2016-4-8 18:24
最近打算研究pixhawk飞控,但是这个飞控对windows环境下的编译支持不怎么好,搭建个开发环境花了好大功夫,这才感觉到keil  MDK有多么好用
作者: 程浥    时间: 2016-5-7 15:53
张金权-11级电子 发表于 2016-3-28 12:08
期待其他理解和阐释,,,

吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?

按照常规思想就开始Delay了,嗯!先闪:

[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
LED_Display(N)
{
    LED1=~LED1;
    Delay(N秒);
}


这么闪还没意思,要想怎么闪就怎么闪,频率自己定,总时间自己定,还要有闪的时间和灭的时间不一样,于是有了:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
LED_Display(ontime,offtime,alltime)
{
    int n;
   n=alltime/(ontime+offtime);
   for(i=0;i<n;i++)
    {
        LED_ON;
        Delay(ontime);
        LED_OFF;
        Delay(offtime);
    }
}



作者: 程浥    时间: 2016-5-7 16:15
程浥 发表于 2016-5-7 15:53
吹逼...
假如给我们一个很小的任务,写一颗LED灯的驱动程序,你会怎么做呢?

但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:

暂时就定个10ms中断好了:

中断不能带参数,看来得用全局变量了。

ontime ,offtime,alltime.来来来,我们给它初始化一下.
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void LEDInit(u32 ontime ,u32 offtime,u32 alltime)
{
        static u32 m_ontime,m_offtime,m_alltime;
        //统统滴 读进来
}


下面就是写中断处理了:
[AppleScript] syntaxhighlighter_viewsource syntaxhighlighter_copycode
void __Timer0Int(void)
{
        //10ms重载
        LEDProcess();
}
void LEDProcess(void)
{
        static u32 allcount,ncount;
        m_count+=10;
        if(allcount>alltime)
        {
                //任务结束
                //看起来这里还要设个标志
        }
        else
        {
                //燥起来
                ncount+=10;
                if(ncount>m_ontime)
                {
                        LED_ON;
                        ncount=0;
                        //看起来还要设个交替的标志
                }
                else
                {
                        LED_OFF;
                        ncount=0;
                }
        }
}
void LEDInit(u32 ontime ,u32 offtime,u32 alltime)
{
        static u32 m_ontime,m_offtime,m_alltime;
        //统统滴 读进来
}


作者: 程浥    时间: 2016-5-7 16:51
程浥 发表于 2016-5-7 16:15
但是Delay相当占系统时间,白白浪费资源你得被骂死,于是我们要采用定时器和中断:

暂时就定个10ms中 ...

东西是这样摸索过来的,要是我们一开始就想好了就好了。

我也想啊。

那么问题就来了。

我们一开始的任务是写一个led驱动的代码。
就LED灯这个对象,我们要分析下它的属性。

面向对象
作者: 张金权-11级电子    时间: 2016-5-10 09:09
程浥 发表于 2016-5-7 16:51
东西是这样摸索过来的,要是我们一开始就想好了就好了。

我也想啊。

继续啊                                                  




欢迎光临 重工电子论坛 (http://cqutlab.cn/) Powered by Discuz! X3.1