关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8214|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. B( K- K  F1 E  k9 `

" M- b: e' {! n( I& d0 \8 q+ ?    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- Z% U! `1 C6 |

4 E/ L* H% `, w: R7 r其他程序段。。。。。4 L! P* X$ _  M3 C% n$ E
! a  |3 x7 Y3 `$ @
   free(x_d);
2 o4 s; h2 o, [, q: P7 S4 B  Y$ J2 Z- |4 R3 j" Z# A
使用DSP侧单独调试功能,验证动态申请没有问题,. Q7 I' h6 m0 y  z0 f$ a

1 q1 e6 X8 b$ O* r6 u! t2 ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, Y  l( ~8 h. d- h$ U

* d: g: C% L! N5 v9 L+ l1 ^% F/ b
7 R0 J2 [3 `9 b  N0 ^
1 P  o4 B6 P+ F+ e4 R; d7 m) l# j; d+ P! V% B( q

* F; Q& W' J  n8 r
: h* c" L1 a/ F4 r( h$ s! Q" Y8 p
& |5 j/ p" p; {5 x( V. }3 _+ `1 M  k4 K, U2 P7 G/ E
% T8 d: e! o2 @/ n& o* d  u

$ O8 h6 M) O3 u0 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# P5 g" {. ^+ Z+ O我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 g8 r$ A7 p2 }(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 V; v5 Q) w0 L
  q6 C9 v- |" D7 V6 l/ w" M
是不是需要在DSP.CFG中进行配置7 E; Y; `2 Y: V- ^8 K2 Q
我现在的配置为. z4 b% P( c$ }' x7 F

/ i2 p& _) w+ ?; B  q$ u- x0 }/*
- U! C; `6 W2 _6 S; L/ l0 ]$ c' V/ B *  ======== Operating System Configuration ========6 Z" h3 w* v$ j# P
*/* y3 q/ C; P; S9 K
. p" S9 @! ^/ f$ m# M7 C  P
/* no rts heap */; L/ S5 H' e; [
Program.heap = 0;  W# N0 g# u/ k3 F. I0 ]; w
Program.argSize = 100;  /* minimum size */! Z( n, _: U1 U' j
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, B' x  u+ M1 C& j3 j2 }- ?) b7 Q3 p  g# _# C9 |
/* create a default heap */
3 m, O% e, k5 r/ F" S5 _3 T* \, Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 Q3 a7 ]; K% {: m4 j& X1 G+ k1 gvar heapMemParams = new HeapMem.Params();
: t+ M/ z( o* ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. W: y+ [9 J+ k' Q1 d" W0 \( T- S' E+ V6 b) Q
var Memory = xdc.useModule('xdc.runtime.Memory');
% ^# I( l! T% N+ P- K; uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: G( y- u7 W6 O$ d5 e- B; `+ T( u7 q7 v' y5 g" t
/* configure System module */
& y! E3 B5 ]8 c* rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 M$ X9 K+ p2 g7 A" j3 I4 dSysMin.bufSize = 0x1000;1 C1 f. l/ D* I! O, O7 P
SysMin.flushAtExit = false;
# a' U: P5 c6 C* W/ ?. O/ B! Q1 v% b" Y* q# G( M
var System = xdc.useModule('xdc.runtime.System');
1 O$ T1 f, i; H1 Z. z; |5 NSystem.SupportProxy = SysMin;
6 _3 f) M3 Y9 f; R1 k7 J  j
- r- z0 }$ ]7 ~/* configure SysBios to use the lower half of Timer 1 */
$ l, o: @' b7 Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ m2 Q3 X) K  g: M3 M8 @, ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# y/ @- V* F6 q+ x1 p' iTimer.timerSettings[1].master = true;
' \! M5 Q* T! c# D0 ETimer.defaultHalf = Timer.Half_LOWER;1 e0 ~$ W5 o2 N# `$ @8 h* P
Clock.timerId = 1;
7 g. q% N& W6 `( ?/ t' k  U" S
& S4 U, h: O" f) m& @
9 {+ n2 f7 _3 \/*& E) `- F' Y+ e  ^( G
*  ======== Miscellaneous Configuration ========
% g" `( Z5 q7 Z( A9 B5 S4 w3 Y: R */) @; T" D  X2 M3 c- o& S
& e+ {1 i4 {' a' Q. K( A
/* set default diags mask */% @6 H' E- \! W) F) |+ n. L
var Diags = xdc.useModule('xdc.runtime.Diags');" a) j4 U* ^* `& e$ G  u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 A' E0 ?4 R: Q8 {2 d6 d9 J' O  K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 C1 O9 b* ^+ B; N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 G+ L' d" E- TDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 d+ t- x$ X  c4 m# F; t# Y. vDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 }( o' _, q. o% |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 P2 J& W& Q/ E' v6 IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 X- R: c, h& Z$ M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) w# f% ^( P6 c% M9 l7 w( UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ s5 z+ y  E3 |; c, z" X
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 @: L, ^6 V5 Z, J; t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- L! y8 p$ I) u! y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 R5 d$ G' j- L2 Y& ?7 {& ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 _/ E; o6 G' F  w8 x& O
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 k8 v) k; f  x, A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& o$ A" r! U* Q8 u/ b& E1 T
8 O# s4 L) f* K* D) V0 J
/* override diags mask for selected modules */
3 V4 v) B! _* i3 b, ^* W- w- nxdc.useModule('xdc.runtime.Main');3 {8 u( @7 ?" [
Diags.setMaskMeta(
8 C: |& W& a5 U9 k) k6 v  {# I. F    "xdc.runtime.Main"," h6 ]3 _, |' `, z, J) ?% r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( R2 X3 l$ f# R+ Y* I) O' R
    Diags.RUNTIME_ON
. i, E) M8 x" J5 d; L);
; v3 S0 [' Z& G9 J7 f" j" b  a' ^: ~
var Registry = xdc.useModule('xdc.runtime.Registry');
4 @5 i3 C. W$ HRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! X$ I4 F2 F& G; O4 K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. @- S6 P. O9 Q5 FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 R  q- F0 o, B% a# i4 @) p+ y( b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 G/ J$ S4 P0 X- \/ c1 g, ?
+ W, X! I# ?, [
/* create a logger instance */5 s5 o% q- D$ j: _# k* ~3 R1 {; ?3 L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" u+ y' n  Q. ~; v) d9 \2 `0 ]
var loggerBufP = new LoggerBuf.Params();7 p0 S3 p" V: H9 W) B' B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 d) ]/ p' F+ E* m* ?# zloggerBufP.bufType = LoggerBuf.BufType_FIXED;' |  H2 D" i2 Y; P! R4 o6 ]8 a

6 |( M4 ]0 f  ]; bvar appLogger = LoggerBuf.create(loggerBufP);
7 z$ Y! t* H* xappLogger.instance.name = "AppLog_Core1";4 C# ^8 B3 U, B9 b# v
Defaults.common$.logger = appLogger;
' P; D2 Y4 N- x7 }; W3 d* c% |Memory.defaultHeapSize = 0x8192;   
- P" M" `; T% ^2 {0 B( nIdle.idleFxns[0] = "&LEDStatus";$ w/ W( C4 l, R+ y& d' W
Cache.initSize.l2Size = Cache.L2Size_32K;
$ v: Z* Q. u) [9 ~5 |
4 U& h6 e  p4 Y4 ^* x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */. }' K. x- x( D& }: l$ V/ o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ Q1 p( z, X1 \0 l6 cvar heapMemParams = new HeapMem.Params();
* A$ \6 L% W, a+ [heapMemParams.size = 0x4000;1 r- d$ D, `. g+ R* v
. P' s/ w: P9 D
var Memory = xdc.useModule('xdc.runtime.Memory');% E7 j( S3 O1 t, k; |/ z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) J/ b8 w+ w9 K2 t) l
; P- {$ ]* O/ G我大约calloc  每次共计大小为5K*16bits,  P0 Y/ E2 J0 r2 u7 }% Z2 w
而默认配置才0x4000、需要改大。5 H4 Q$ k: Y: F* [. s; @* L# a

& h$ i" `1 r" R' `5 q, r. M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- Q0 Y) ~+ G. t8 q8 y
Program.heap = 0;3 E% F: J  g6 B" j7 l4 k9 ?
Program.argSize = 100;  /* minimum size */
' a8 i" M; v+ M" CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-4-7 04:38 , Processed in 0.042832 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表