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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 \( q- M! z2 k2 H/ O
  H2 ~. W# e' M# j& r    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& P8 M4 S2 O- w8 n
) C/ o% d3 `# I4 P% K其他程序段。。。。。# G+ w% U6 U" F) T3 b

7 o+ K9 d: {4 F7 s% z: ^/ G: m+ s   free(x_d);
9 K, o; v& H4 ~8 O8 [, ?6 c8 |  d' _  h6 Q7 ~$ e4 \) P' q* n4 d" S: h
使用DSP侧单独调试功能,验证动态申请没有问题,
/ U! v& r4 F' l8 R. n* b7 Y0 V6 b4 p" n; C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 @- X) Z5 L8 x) V
6 f  R' |+ T2 C6 u) W  x' T

% t% a* @8 ?/ r! |. U) i  n5 Q( Q2 \8 C

4 A1 j; x9 e' ]2 B$ T; @4 V
) @, o8 L+ H: G7 n$ v. R1 n# h
8 s' d; I8 c, n$ _! B1 ~% Z4 {- {7 Q9 @% o0 a, V
- p2 Q% a' w, ~& h" j

/ s! p: H9 L+ ]3 k  o* C+ E, t) u8 ~1 E1 S& ~3 \! R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 i2 f+ U+ b/ o- q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- [, d1 Y1 A- W+ \  o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 @; F. K2 x3 B" c5 C5 Y

7 s4 d" g& e0 F4 E$ m是不是需要在DSP.CFG中进行配置
8 N3 y& A3 i2 y; j" O我现在的配置为  T1 ]0 N" h! N3 p; p9 Z

7 m0 q" b3 q# P9 @/*
& q5 E+ o  U# {+ O$ L8 ~( k *  ======== Operating System Configuration ========
* ~8 B2 U+ }! U  Y$ O  j */
; I6 B  M' y* I7 R7 m. a, k. V: |( P! _1 U! J& G
/* no rts heap */
7 u% W) [5 s  W! i  wProgram.heap = 0;
( {* o/ Y! q: w, k, ~0 q% A0 sProgram.argSize = 100;  /* minimum size */% E+ H4 c; H8 Z+ w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ B$ q+ I0 V4 K2 A) Y. O3 z' G5 B0 a8 [7 p0 Y( ?2 |! n1 F$ L
/* create a default heap */
* R( F4 g, a: K" W* u# Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, \$ A2 I3 P4 C8 F( E9 k! Uvar heapMemParams = new HeapMem.Params();
; J6 e* H# Z! u2 r4 L/ i4 SheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ X6 s7 ^* ~7 h, v+ c& W3 \) a
% i' r! G/ Z2 O, x' R
var Memory = xdc.useModule('xdc.runtime.Memory');5 A/ A8 b2 P  `/ I! @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 I" f& @( [9 V- C8 ^0 {
0 W8 V8 X4 O9 Q/* configure System module */8 n7 h' ], q: P& B7 _
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* }. x4 k9 w8 J2 u5 g' U# u8 RSysMin.bufSize = 0x1000;
! H/ _2 W; i# V  q( b2 J' qSysMin.flushAtExit = false;
$ f* s1 c; D. P7 k# |$ }+ q9 l% m. l& d. }$ P" N
var System = xdc.useModule('xdc.runtime.System');
2 p7 n" k2 J5 s% a6 `# \5 X' ISystem.SupportProxy = SysMin;
6 I# z1 o/ m8 H+ v4 D- F2 F# M, C% |0 C4 K6 K, p3 t
/* configure SysBios to use the lower half of Timer 1 */6 n' t9 u+ ]* l- T1 M1 W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  L8 C: Z2 n5 G1 `; n0 A3 Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 U' j- g/ e& z- l
Timer.timerSettings[1].master = true;
8 Z8 {' j7 z$ F' r& M: s/ ?Timer.defaultHalf = Timer.Half_LOWER;' E* }4 H7 m' q& ~
Clock.timerId = 1;
* n! F+ @0 q/ x6 z% ^( _4 ~) J( S4 h' @9 S; _4 H

4 Y& R4 d, H  h/*. V/ y) W/ m- A, r! C: ?5 C  i' ~
*  ======== Miscellaneous Configuration ========7 g* P0 M. D! W# x# }, n4 i+ R& Y
*/  n0 c8 _$ F6 s8 T/ ?& u
1 R$ d1 a$ E0 ]4 P# @3 t
/* set default diags mask */% r# a' T0 K+ L% G
var Diags = xdc.useModule('xdc.runtime.Diags');7 t0 N2 m# p8 b0 }7 L" S: w6 I  K
var Defaults = xdc.useModule('xdc.runtime.Defaults');( B( Z. y+ V- a! G4 V+ O6 M* h

7 ]/ m9 {7 ]9 |( ]/ T  d2 dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) z% e) d+ o1 ~3 \9 h. x" ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 M. `4 {( A1 ?: J$ q' n" K6 b! e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 H/ U& C- V& H- |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 P' f2 k$ {7 l' i8 t# h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( y% F5 |% H0 p0 c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" x$ r6 M+ ?" @  x3 W" L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 M) _0 b5 C, p% j3 t, k7 J4 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, C' G0 A; A' g+ r: g
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 G+ h6 a$ ?0 D: o2 ^Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! w% D# u2 ]/ ~) ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 n, O6 c4 y$ k6 T& \9 u$ W' g1 n
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ L: b; ?0 P: t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 l9 N2 ^/ n% x$ A3 H0 r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 s% l2 Y+ O# E7 z" s; c' K) v0 i9 g! M1 {! t8 y$ ~* p6 {6 t
/* override diags mask for selected modules */
# L* z  a3 R' nxdc.useModule('xdc.runtime.Main');
! T8 u- u3 d+ wDiags.setMaskMeta(3 j3 d" p- y: s1 ], K/ M5 [
    "xdc.runtime.Main",
' {  `0 J- f' K7 z; b    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ G$ g2 w. `" @/ t% T7 Q3 s. q. p
    Diags.RUNTIME_ON% \" ^' d. C/ M
);- m# \2 l/ l8 H

# `( U, e9 N( }$ P% bvar Registry = xdc.useModule('xdc.runtime.Registry');1 l4 |' r. v  O$ F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ i- S& v6 f- CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% s5 ^% r4 c5 d" W. @: z2 PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 Z# W. k' g  u/ ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 {, Z: ~8 ]! M) O; C4 {* a4 c4 q5 j7 P& ~
7 d3 D1 y$ m+ o  W9 ]  e& D& Z
/* create a logger instance */, i/ @( ?3 y4 w$ O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: _  X' _& x; S7 m& z6 |1 b6 P1 M- q
var loggerBufP = new LoggerBuf.Params();
1 y$ n0 {- ?1 J5 ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* W4 _* n% ?$ ~5 x9 j* V5 ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' v/ W3 Y0 P: |" O' y- \- ~8 F- J) ^5 D) b6 p% ~" _8 h1 R* U4 C
var appLogger = LoggerBuf.create(loggerBufP);. u' I0 Q1 c. W, M1 X0 g# s0 p. [7 q
appLogger.instance.name = "AppLog_Core1";8 |% x  o4 Y% D
Defaults.common$.logger = appLogger;
5 o% i9 E7 F9 x. V0 }Memory.defaultHeapSize = 0x8192;   
5 k( H! C- A: ^. \) E, ZIdle.idleFxns[0] = "&LEDStatus";
5 m$ `5 }9 ], C7 MCache.initSize.l2Size = Cache.L2Size_32K;
' n( A$ @' T2 t" F5 u8 [3 `  @% v; c1 `  j- ?3 i# g8 O. I/ N. y
回复 支持 反对

使用道具 举报

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 */
: P5 F& K& P( Q1 S7 O; gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. Z% y7 B/ u- J* D) X8 W0 T
var heapMemParams = new HeapMem.Params();7 c3 v$ f9 }1 n6 l9 q
heapMemParams.size = 0x4000;
' o; s4 N1 E, I  L  m! B5 X2 |
5 B& g8 S/ I" G# }, X, ~. Avar Memory = xdc.useModule('xdc.runtime.Memory');" l7 H4 _& \+ d. n3 J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! Z+ j$ l8 v6 c* l$ j4 }+ a0 L

  s! a* U0 v* n/ Z* x8 |9 c$ k7 K我大约calloc  每次共计大小为5K*16bits,
* e" x- Z3 Q3 k# b) r* G6 `% X& q而默认配置才0x4000、需要改大。# t6 I6 O1 c+ @! z
/ L1 ^- \; }! G1 _4 A2 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( b6 u# O3 V$ L5 Z' ]- TProgram.heap = 0;
/ E: r. E% M" j  r: W. X* XProgram.argSize = 100;  /* minimum size */
3 b* k  r+ U* q& eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-4 17:28 , Processed in 0.043935 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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