关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 q6 j1 E) Q* Z, q! B" ?) U; L8 Z1 a' a: ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 i6 i' }  ]- o: v4 A5 x& b2 Z
0 U! z6 m" r1 I8 v4 a其他程序段。。。。。
$ a. l) q; k. Y( _+ R( r 5 t/ E/ k- |; B4 D% [
   free(x_d);9 x  j) n' P4 V/ T: U

. O' W3 W3 h% M* ~3 \/ s使用DSP侧单独调试功能,验证动态申请没有问题,! I) s: d, g7 E- u* j$ a2 B

! c! q) @) o+ W, ~但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 n: o1 I# f' f
; Z) C5 F: Y& \4 F- a
1 ]2 g. T0 i  _
9 v9 s7 Y7 w6 C7 c- x$ r/ k
1 a, ^* u! T* f' A, f9 P

5 W5 b3 N( \' k( i
7 l" [6 y/ x+ E- b: j
! |! |. h' [$ |! f& v* \# y9 K8 W. i* }1 d7 R7 G

  P/ j& ^$ b0 G# c, P. D0 `$ Q8 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# r4 [$ O3 G; B. A8 U; C: U5 EProgram.heap = 0;" f) a* S( Z( l0 H0 F: l
Program.argSize = 100;  /* minimum size */1 }  [+ [: o4 g
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */! i, }1 S% |" y  F8 t% R9 a, \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" }# h; c- Y4 evar heapMemParams = new HeapMem.Params();$ q+ V4 ?% M  O* o/ h* {
heapMemParams.size = 0x4000;
  T/ ]% z3 \" G1 w! a3 r9 f/ {) D+ `; Q2 R5 t: M
var Memory = xdc.useModule('xdc.runtime.Memory');
. ^% z- H% Z+ m& W' M, MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 c8 x+ P2 G' i3 {$ _
& q7 @0 I9 p  R/ g& ~4 v4 m我大约calloc  每次共计大小为5K*16bits,
+ |; N3 J, p: N/ s8 [, m' a. s而默认配置才0x4000、需要改大。: W, [: A3 O" s  A- g
) `% j% [2 G1 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 K0 b- {3 ]; p  O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ d0 s2 i; v) `' t7 q! R# j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' l$ q+ b, {1 S  W

4 ~5 Q% a. n5 a% y+ v/ L是不是需要在DSP.CFG中进行配置  U* S7 {/ U' Z' F
我现在的配置为
8 f- R4 \1 w8 T7 O; f3 m, v8 Y* A" ^3 R; O9 t4 ?7 p) O
/*
  d& G# |6 \- Y( `9 P *  ======== Operating System Configuration ========  ]4 j% q7 J1 C/ N
*/9 @( r, A7 m1 @! P
) B! h* _! J# d4 w% Q: l7 _& E4 K
/* no rts heap */8 E0 a9 [* N% k
Program.heap = 0;. w  J6 S3 U0 v' N
Program.argSize = 100;  /* minimum size */  E! Q+ m% V, L( ]/ I5 a: |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ X; Y9 r- L0 K" q. `' E

, L1 ?9 q: B* [( K/* create a default heap */3 Q: n' T$ y7 E5 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, m8 C# Z$ H# q2 c' \' Evar heapMemParams = new HeapMem.Params();
3 w2 l& J# v4 e. Z" [3 JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& Y1 U; I/ Y, j. V5 Y2 o
) ?& ?! Y: S; v* F& {; j
var Memory = xdc.useModule('xdc.runtime.Memory');4 M! f8 h  R5 r  K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- s- x/ @. j3 o4 V

: \2 |/ ?  l; s9 R- P. |/* configure System module */! p( L3 B. H; ?8 _3 C, I- v6 \
var SysMin = xdc.useModule('xdc.runtime.SysMin');! J  I5 Q+ a( @
SysMin.bufSize = 0x1000;
3 g9 t- j6 D  h6 f. n- g; ?SysMin.flushAtExit = false;
+ k+ Q6 m1 V) [6 F# q6 K6 p+ W1 [  w, l# [/ T
var System = xdc.useModule('xdc.runtime.System');
/ T3 ]! }& O* jSystem.SupportProxy = SysMin;& P' |& S4 T( P3 w1 h
4 y0 \# ]& ^$ e
/* configure SysBios to use the lower half of Timer 1 */
$ ~# k: P& O5 A7 B( p& f# [  cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' }, P) P" X1 C* hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');6 A( {# J$ N+ e' \5 `6 {2 H" o
Timer.timerSettings[1].master = true;
/ _  T7 K  d) W9 G, G8 }Timer.defaultHalf = Timer.Half_LOWER;/ |0 M) F! i0 A0 K& |9 U
Clock.timerId = 1;
# o) w- l5 e, U. ?! n1 v
. t& i. u+ P) z; i; C1 {0 U5 ]3 J6 y2 H# `2 h$ A! z$ N) W* C
/*  ~3 D' ~2 I9 T; F2 b
*  ======== Miscellaneous Configuration ========: P# H% z4 v6 V4 N
*/$ H5 d/ J+ M/ X; V

. W8 L: T4 o& h/* set default diags mask */: Y8 V9 y  N: w/ b
var Diags = xdc.useModule('xdc.runtime.Diags');- ^) M+ e+ e0 `0 O1 K
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 U. P. X: _3 j/ n8 L0 h% w
+ U  c% W; B# l# eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( W' R( _! t! K3 I' \; G5 P* o: ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 D7 n+ i! {$ I8 |) oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) P% u, _8 b/ v! d- ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( ~5 X# Z7 n2 X+ oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- Z' ~  k3 X. j$ _/ p7 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 {: V& w5 X' d. z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& W1 z+ F8 J0 G, u/ hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 i3 i9 V( I# t' l- N! H' v$ Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 d/ I! j$ [) o) w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. n# g$ y) B8 A" w, b4 B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 A3 F* b" X% a+ D1 d/ gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; t& W  M! d# G5 G9 uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 L5 c4 w. X& A3 H: xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% C* c, p$ ^( Q8 ?/ t. T/ s9 K, E" ^
/* override diags mask for selected modules */8 P: z$ w& }& \
xdc.useModule('xdc.runtime.Main');8 J$ X% ~8 P7 t) X0 a3 n- I. r. a+ D6 r+ [
Diags.setMaskMeta(
1 [! ^+ }" E' X3 R3 D    "xdc.runtime.Main",+ i6 e) |% \; l! I/ x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; g5 B5 R0 }& |
    Diags.RUNTIME_ON
" V4 y& L6 f; h/ b3 E/ n1 a. M);
6 K! j" ?  O  D: P" b5 ?" p8 B; m' I
var Registry = xdc.useModule('xdc.runtime.Registry');7 s+ M8 S; I! C, |% {2 E& @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 L5 _) p; N4 o% PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 f/ |% ~* k0 _' X/ }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 U4 T$ i2 ?# B" P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. `2 s* G7 K5 L! j) W. g6 n4 t7 @1 f' o, [) e
/* create a logger instance */: e5 q  e5 i" ?! f2 @& M$ b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' H& T' v$ t4 {var loggerBufP = new LoggerBuf.Params();
* w8 l: e- b2 N* ?6 floggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) u1 t$ H4 T1 v4 V& |) i$ Q* y" w8 \loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ q8 W) i: C. v( g. s; e

+ f) Q# x- ]0 y" E; C) j0 Avar appLogger = LoggerBuf.create(loggerBufP);8 T& m( a$ V" k& [6 L& G. n+ C9 Y
appLogger.instance.name = "AppLog_Core1";$ l0 \2 S2 S0 v4 j
Defaults.common$.logger = appLogger;
, N6 {5 B0 Q; r9 S2 ]( s6 }Memory.defaultHeapSize = 0x8192;    8 @3 Y. e) {6 y/ P& u  o* a9 c
Idle.idleFxns[0] = "&LEDStatus";
0 u4 J& }" n3 V" s/ UCache.initSize.l2Size = Cache.L2Size_32K;
/ X/ q. d+ ]* ~9 W( f9 x: L& \+ @
回复 支持 反对

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-11 02:12 , Processed in 0.045543 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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