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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; X, K* u2 ^7 @; X* m# g7 G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ Y1 h8 ~, ?5 X' E" \% ]
9 J$ g/ n( c9 p: i" e, q& x& f其他程序段。。。。。
$ _5 j+ d! [: n. F% H , x3 P- H0 {/ {: B% c7 P
   free(x_d);8 u5 H# ^) Y7 A/ K& v) H8 f

. U. ?9 X. O! g2 ?9 _6 @使用DSP侧单独调试功能,验证动态申请没有问题,; L5 I: ?8 o6 h3 o" z
2 U7 x5 M' k% c1 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) `$ o" L4 Q# j. _: [# s
: |* A0 s: O; W
7 W# q- \- }) r* x+ ?/ q: h

2 ?7 d2 C* |2 h3 D; i( t
) g0 ~+ u4 Q& `
; R! m/ |$ l% r9 Y* p0 ?) \& G: U% L: p8 O1 n2 R! l

$ @0 I5 H5 y$ M5 c# c# D; S/ F# T; m0 {7 m) A. q0 h* S- M

, j5 Z7 W6 a* W5 G2 }3 I7 @/ F; B  O/ E7 H$ W" V9 O1 ^3 H4 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 R9 {; h9 W/ x: o( M: \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 {, t1 h! B" p* ~- J# ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  O$ y4 I0 O2 H" m) H7 `
# b6 @: B- j/ b  n. g7 L/ E
是不是需要在DSP.CFG中进行配置
- e3 t. \- r* G/ \; B2 {# ]+ G我现在的配置为
& k. q* x& ~( L! Y( z, ]) g1 `+ |! N, I. B' ^6 Q% [4 I
/*
, w8 x1 C- Z# n8 {; M *  ======== Operating System Configuration ========5 X" F4 X5 ?/ _8 C& n# W5 l& i
*/
  i3 a* }/ x# N# a+ F) M( {9 R; d" y+ Z" C" B( x) T3 t1 V" I
/* no rts heap */0 E% D/ F6 a% j; T5 i4 u0 B
Program.heap = 0;
3 i4 ]! O  t  Y2 [Program.argSize = 100;  /* minimum size */
% E2 ~/ {$ n8 h- O- B3 E; G+ Y% mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& q* M2 S9 B: i9 i: g$ h3 K% X" u! [! j
/* create a default heap */- }6 ^/ K" ~6 e3 ]- _& `  M9 P* P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( f- p, u" X0 v+ zvar heapMemParams = new HeapMem.Params();- ]- u$ `1 t6 v# e# @) [
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 @4 x/ e& b( h5 E0 @4 `9 c" T; V1 S, t0 O) u0 A8 {
var Memory = xdc.useModule('xdc.runtime.Memory');# ~7 {9 e- @+ n. ]7 \$ Y2 S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  n' D5 V! N- R" X$ Z8 z/ i3 M4 h; `- t! @: f  f
/* configure System module */) O6 b6 G+ l6 v% m$ ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');' ~1 P: P3 w5 R2 r
SysMin.bufSize = 0x1000;5 w9 Y6 N( P( r/ S8 |
SysMin.flushAtExit = false;+ u) u4 I& a$ K3 E) e: g
2 p1 d8 r2 M& o7 ~+ a
var System = xdc.useModule('xdc.runtime.System');0 l; P, c, l9 L* O2 a9 i6 O
System.SupportProxy = SysMin;  e& H. e* _1 }3 |

* y3 `" E: ]) L! c9 d. x/* configure SysBios to use the lower half of Timer 1 */
! J' ^0 V7 d& N# w7 h" mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 V5 m# a5 s& t% O/ L! B4 [6 w
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 l; b5 L5 z+ X; ]. c0 F2 z0 VTimer.timerSettings[1].master = true;$ C4 r% u7 |: u5 D. Y
Timer.defaultHalf = Timer.Half_LOWER;, y1 a) E0 ^( m* l6 n2 J+ ^- R1 h
Clock.timerId = 1;
' M8 f7 N: a) Y  F- i. s- E; P# V7 R. s

$ L) a  r) q/ |8 S/ `% M/*1 E7 J& C% ^, _1 P- m  s
*  ======== Miscellaneous Configuration ========6 n$ [' ?4 o, v! J' O
*/6 L. V5 q" \8 d5 T; A3 Y
& P3 T0 H9 C  G5 W" S+ W
/* set default diags mask */
4 U1 W. `( {- ], }var Diags = xdc.useModule('xdc.runtime.Diags');
3 i) q3 ^3 s6 O: f+ Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');" _( G7 w( Y* @, i- n- D+ M& Z
; M8 c; _6 \  y0 X0 Z) p! V3 v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: p5 `) a1 v9 Q! l$ V1 x2 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' x0 S# z8 I7 r- ~3 y4 e. Y- Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" n7 e8 Z$ q2 h' Z; P; {* g( H8 zDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 s) o6 U/ g! Z7 a9 M3 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 g9 N1 l5 c% \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 H7 {& x, k) Z$ C3 T2 {4 y1 R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& T) @: J3 d9 r. A) Y3 {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 m$ [0 c0 T( v) |2 d# |2 ~0 gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) U4 q, X! N! ]# z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 z! ~: p1 r- v* mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 ^  {8 d% ^4 t5 y0 Z+ pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 ]+ {. s& R/ ?; k8 QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ C( c$ s/ s; s# k0 X. v8 j) fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& D, i) z3 ?' @/ s% t, [$ @2 l* O" E+ T" ~' |# s
/* override diags mask for selected modules */3 U0 f2 G. H0 t* r2 V5 H
xdc.useModule('xdc.runtime.Main');. f+ O: O. [- j
Diags.setMaskMeta(9 Y/ y: i( X/ G( U$ h
    "xdc.runtime.Main",
: `7 D) |0 ^+ b+ P% w9 R9 p0 z    Diags.ENTRY | Diags.EXIT | Diags.INFO,- b) F6 l) S- X" y5 v. K7 f1 {' B
    Diags.RUNTIME_ON
5 T" F5 S! S1 B0 I);: Q3 {7 S& K* i: q( F

4 |8 w$ H% w' y5 hvar Registry = xdc.useModule('xdc.runtime.Registry');
* o5 S2 M/ Q# Q: \2 h  U# t: URegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" g7 k1 W- t1 ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! n' Z2 v) G% y  r# [' W2 `1 x& oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 D% H4 N) E# N2 j" b! _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 e) R; v2 [5 `
# U$ c' o( J* U
/* create a logger instance */
4 z) S' P: J: Nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. z9 h9 H; h* \2 b, X8 G. v* X! Dvar loggerBufP = new LoggerBuf.Params();
- C  c4 M6 w5 _7 IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 B5 R4 W4 C( L+ L# T6 U; L6 ]7 v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* z1 z7 X4 j, k9 M% d. h8 _5 N
& E- M& p3 H7 V/ bvar appLogger = LoggerBuf.create(loggerBufP);$ \; v8 j3 f/ s/ W' C7 Q" p
appLogger.instance.name = "AppLog_Core1";' j1 h2 O7 x* S9 P1 }4 z7 y
Defaults.common$.logger = appLogger;
( e2 y" p# A3 k0 [) G" q! CMemory.defaultHeapSize = 0x8192;    0 O5 g  S; y# Z9 ~
Idle.idleFxns[0] = "&LEDStatus";5 b& G9 [7 I2 P; Z! B3 e0 W
Cache.initSize.l2Size = Cache.L2Size_32K;: [2 f' v2 n; W5 K; _5 J

2 _7 A2 T, ]: e" 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 */6 Z" e, ~9 q9 C5 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( K4 Z7 H" X( Z: H* E2 k1 j) z  dvar heapMemParams = new HeapMem.Params();
* ~9 e5 o4 X" Q3 h7 u8 }$ WheapMemParams.size = 0x4000;8 o2 ^1 @' H3 o7 o
% Y$ A2 Z* W, W
var Memory = xdc.useModule('xdc.runtime.Memory');9 C1 ]+ |+ `# z$ h" ?0 M5 ]. B1 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! ?0 L+ Z7 R1 g. {! `( {* v% G0 E$ g

1 r( P5 V# E) J" ]" y& X我大约calloc  每次共计大小为5K*16bits,4 {; X1 Y( `) ~9 L
而默认配置才0x4000、需要改大。
8 H* ?' T9 X! u) n5 {( L  N- f8 S( L/ V4 Q" {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 `, U0 x- G! ?" J% }  e% NProgram.heap = 0;. u9 o/ }  [3 B; z" L9 `
Program.argSize = 100;  /* minimum size */
4 P9 T6 _; V% g. [' |& ^2 f! @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 18:24 , Processed in 0.043239 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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