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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 n1 X+ z) y8 K/ q' w0 k6 `- ]* M$ {0 [- i, _! S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 d- I! F2 Q2 ~  z
/ F) N4 J: e" E1 f! w  k' T
其他程序段。。。。。8 B1 P: `! k, v/ H5 n- X/ a

" l) e  \+ ]2 e8 K/ X   free(x_d);
$ ^$ e6 h9 x! d1 `2 O7 G7 x
) {( D7 }5 Z* G, ?* p3 p使用DSP侧单独调试功能,验证动态申请没有问题,
+ {% t5 U9 z# X. ~' }! H) ^% g- j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 `0 o" w6 M: W. V
% E' K3 f: E" N: V" S) l
/ Q, ?/ Z. c8 M5 }7 g. r& H
1 u+ ]1 {, Z' I* n& s5 h

8 o& [" ~8 C0 X' C( X+ R: ]8 @0 k; M* ]% e$ @, G) `* A# p4 p
2 K) I/ l$ o+ {# M$ [
+ J. L' L% _9 p7 `8 q8 A
) ~/ o/ U# ^. S9 D. l
) ]) |. F" H9 `7 N' s: `
: \9 Z) `+ j) w* @" s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ V; ?# k' ^$ \3 b. s8 p4 Q( U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: h/ P4 Z$ Q$ s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# _* G0 t: n! {$ x: F* K
& h" `3 e- w3 |' r& M" G4 t6 p' A
是不是需要在DSP.CFG中进行配置
, C2 N& K+ J, }/ t3 O我现在的配置为
+ b: B* y7 c9 o3 T  R8 W" N% I- P; [: _1 j3 ?6 F7 _! B* C; |
/*
. Y; N- c& A, o' d. R3 U *  ======== Operating System Configuration ========( x4 h' q9 s# D1 K
*/4 q! P+ w+ J1 Y

$ H' E" @1 z9 y" j6 v: P& t. p9 V/* no rts heap */) m& T3 a  p8 e  L3 k# ~1 {, B( l
Program.heap = 0;
4 R' d& q! t  k- W! mProgram.argSize = 100;  /* minimum size */
- M) {# N9 g3 {! x7 M1 i! R* }( k5 @9 sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 T$ ~$ w; ?/ R& g4 Z% x+ k8 S$ i' H. _/ q  I8 c
/* create a default heap */
2 g' X2 V, t  vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* G4 g  f5 ^$ ~. X
var heapMemParams = new HeapMem.Params();
8 f1 ?" K) Y4 X  U1 w4 v* HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" g# Q$ |+ g  s: @1 ?2 a, `- ~% H/ {( W7 ?6 E1 v
var Memory = xdc.useModule('xdc.runtime.Memory');
1 f0 ^! D( a4 r# |1 NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ T7 z8 d) {1 g. X8 z
8 C' `! u# G# g7 y  l" p$ U/* configure System module */" e' R/ \0 w4 |( l, T4 ?5 s" f
var SysMin = xdc.useModule('xdc.runtime.SysMin');. e' a3 r# x( k2 a' e' J: m
SysMin.bufSize = 0x1000;( {! I1 @8 P) {4 @" g, Y2 O
SysMin.flushAtExit = false;, f9 ], L5 A0 X

7 |0 Y( t6 H( h+ E/ [$ r& d2 nvar System = xdc.useModule('xdc.runtime.System');
; u' `; F5 p3 @9 r4 D& X! F% I" @System.SupportProxy = SysMin;6 P  I+ n7 _1 i. U# ~1 X( L
1 S1 c! q2 g4 n, p  G; w
/* configure SysBios to use the lower half of Timer 1 */
3 Y/ N: S- I* M7 J% |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; ]% t' H# |/ lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 q! ]9 d/ X4 E0 R% [9 B: gTimer.timerSettings[1].master = true;
7 z) {$ f( l3 a5 W0 oTimer.defaultHalf = Timer.Half_LOWER;
- \7 w8 X  D$ u6 O* X. [  s$ iClock.timerId = 1;/ ~! g' B* y. ]9 s7 P* I4 s
6 {( e3 D3 X: e, @

" u+ i) ~3 S; B# G2 W; \/*3 ?) P% r0 ]( n: v' i+ G
*  ======== Miscellaneous Configuration ========4 f, l; _! |4 N- h, ^
*/; j  e; j/ d1 b% \# u  `( b" Y8 I
, \* L  C, O$ z7 |8 ^7 _
/* set default diags mask */
: [1 ^' ~( g! ovar Diags = xdc.useModule('xdc.runtime.Diags');- _4 ?& x+ q1 R2 u0 b
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 _  B6 x6 B; P1 ~- Q; D  u
* f6 {  U  Q5 r! Z- `) VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 G5 s+ z' F7 h" e  n: D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! L0 r) {9 T! s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' c9 {/ \# ]; o) ^. sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) I7 j, `( y2 J) q% g) o6 V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 N4 A; n( a6 G- d6 T  L- b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  c1 Z; W( `* Z) v1 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 p# o; n, l& R- v" b  aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 {$ d+ O+ U9 L( ~7 XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* Z9 H2 u) n: A' L" F. q  F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) l% W# F, n% ?7 k8 x2 j% A/ {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ F0 K. K( m8 D. @1 K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' T/ i% O0 t. \$ TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  V5 d- Y& P' w) e* o) g! B4 QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ V: {; F" h4 E" _% L
5 t7 A% M8 x$ T  _
/* override diags mask for selected modules */# ]" ]3 s, m& ]$ }! ], O
xdc.useModule('xdc.runtime.Main');
- K9 X5 j% I/ a# ]' B# n; MDiags.setMaskMeta(0 v9 s# G3 E6 O5 U' w9 m$ q7 p; S
    "xdc.runtime.Main",
0 a  a6 K" F$ r/ t    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 |: u1 a5 U; M8 y
    Diags.RUNTIME_ON8 a" m& T" G6 ~. i7 z7 O$ R
);
. g7 y9 q$ O* v" @
% m+ R6 ~7 T. J. a$ o# Cvar Registry = xdc.useModule('xdc.runtime.Registry');
  a5 A. T) h2 A) B& y4 \0 B5 _1 F$ KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" w; S+ r$ r( q2 ]; ^& _% u. e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# c: c- Z/ b' i" @$ U# ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. t7 \9 h+ V! B" C& }- W
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: P* K/ |# r9 }9 a& \% L* _% n1 J% V4 M# H( `& s6 O
/* create a logger instance */
6 N# e. D- P; F; f8 G2 D/ q, w& }$ ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ z: d1 M  r  j( uvar loggerBufP = new LoggerBuf.Params();; x" L" u9 E/ l! g' s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 c$ }% R1 S2 c* h5 m; MloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% k2 Q) n) n) V
* o1 C1 _& F8 b# ~/ t" bvar appLogger = LoggerBuf.create(loggerBufP);2 V) C7 w& F- M  j7 g$ F
appLogger.instance.name = "AppLog_Core1";8 {! c! J$ E/ }" z
Defaults.common$.logger = appLogger;% O; k6 C6 W+ L  w
Memory.defaultHeapSize = 0x8192;   
* Z  {2 i' c3 p/ ]$ w% @- @Idle.idleFxns[0] = "&LEDStatus";
- v4 \* t! A& u: N! \" z- U: MCache.initSize.l2Size = Cache.L2Size_32K;
& j& L0 W; U2 p, W" y' h) x
& v% @, t1 [! o; Q3 J% e/ d
回复 支持 反对

使用道具 举报

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 */
2 S; Q/ |  g+ p5 Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: M. V, c0 f' {/ e$ E- X+ @4 `
var heapMemParams = new HeapMem.Params();' p' v( z) n  ^2 }. d7 }, ^. ~
heapMemParams.size = 0x4000;: p& V4 a8 R, O* c5 l3 ], Q8 e
7 S; k0 r1 @# Q5 b, e  L  W4 T
var Memory = xdc.useModule('xdc.runtime.Memory');
: X  ~& y. ~4 G, f% t7 z7 K9 q; F% DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 g  V6 }+ T% I# O
9 K: X( ~' ^) P我大约calloc  每次共计大小为5K*16bits,
4 \# }4 ~! ^4 w5 z# G而默认配置才0x4000、需要改大。
/ h% e5 N7 N2 f/ s! I8 p7 V$ Y0 ^% C: E3 ^$ ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 Y' D; t$ {3 ]) y$ u9 z
Program.heap = 0;" B8 H: s9 h0 N- I' }9 x4 E
Program.argSize = 100;  /* minimum size */% b) m7 j1 N0 e( b: {7 U5 o
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 15:23 , Processed in 0.049692 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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