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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 v- ~2 S1 `; A% K8 q
. R5 c; Z8 q- y9 h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; M. e. i" ]7 _. s8 }4 p% W* I/ ~# F" [/ `1 s* @% X- Z& R) L
其他程序段。。。。。3 U( T5 c- C' M+ N9 ], R

& R2 B  G' x  C5 ?1 Q. q   free(x_d);
! j9 D7 Z5 \" v7 @
: l1 y: m. Z  e: ~2 G使用DSP侧单独调试功能,验证动态申请没有问题,$ ]$ W- s3 r. q0 H1 {- P
6 T# ]) ?# q$ H; U( w/ K0 R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 T. s# w0 {% n" h& h4 Y

. N' |" \2 K/ c: `: ?  G" y% i
; g* y6 c1 L1 p4 _, x: Z0 Q3 T
' l+ S" c6 G4 F  L2 {
, s1 n& L  ~7 y, ~/ R' M/ a  s" }* o& [

- e) Y- G0 D4 o1 \" o- h" o. }' c2 z. c

6 {6 x& p1 f; h. y0 e& h$ d  f  S& }9 U7 X5 E

  h. n, h2 H4 o. U5 I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. T4 n) o+ s: h8 H" e- P2 v
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, J) l9 \* G; N: A% |( |* ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 ~3 W) [' V5 A
1 t; S" x1 @. [2 l$ T: g5 N+ `
是不是需要在DSP.CFG中进行配置
2 R( P1 w) e, {6 `+ O1 ~0 K我现在的配置为
' U4 z- |- ?7 L6 |' _+ [, s, L  a' J; A0 C, M8 U
/*- r- ]1 @- M4 k) m
*  ======== Operating System Configuration ========
4 L7 L( e+ I9 V; M */
8 f# G2 Z* \( Z1 e- \0 Z; [- w2 I% b4 Z0 L( R, Z" X6 ^
/* no rts heap */
2 Q7 Y+ H4 V3 a" ZProgram.heap = 0;
( H6 ^7 }/ Q7 K! f7 [* W6 j& q$ eProgram.argSize = 100;  /* minimum size */
: k8 l2 `  M( N7 }* }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( e" y3 {. T9 |
) u# c) R( {  F. o2 W9 g) q/* create a default heap */2 x5 z) ]( Z: }* A  l3 L8 A# ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: m. @& w. B" [  ~8 x* M
var heapMemParams = new HeapMem.Params();9 x; R( {% Q8 ^- _/ u, c$ ?" ?3 M6 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" j' u+ f& b& j3 X
* s, O7 f- }0 p& A, d, o
var Memory = xdc.useModule('xdc.runtime.Memory');' J* ?' U. D; o4 q; T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; n5 p' K1 V+ M& C# _. ~  R" Y
' l, i# y  W  y# j& ~/* configure System module */
3 o; S% N! G6 w" B, k0 svar SysMin = xdc.useModule('xdc.runtime.SysMin');* M6 d  r3 w) u. y/ O6 z- m8 J. V
SysMin.bufSize = 0x1000;0 d2 R& a- Z) X5 v# Y7 N
SysMin.flushAtExit = false;( [2 k  t/ f5 `! |
- u2 d! D  Z) [; o
var System = xdc.useModule('xdc.runtime.System');
# J+ m; p' w+ uSystem.SupportProxy = SysMin;; p" D( a  L0 j% Z

  V# Y) @7 ^& {, c0 ^/* configure SysBios to use the lower half of Timer 1 */+ c0 y2 X6 Q' N5 r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ V* ^6 g1 M* m: ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 s# X- J4 W$ }/ |/ w2 A- l
Timer.timerSettings[1].master = true;$ }" N, u4 o& \. k3 v( Y( o
Timer.defaultHalf = Timer.Half_LOWER;
  y. H, e' j3 T. x! v8 H; u% tClock.timerId = 1;4 L$ m# b5 H9 J& {9 h6 ^# B
, x7 |- N3 `0 {7 Y

; H# Z8 C" u7 `4 ^8 o/*
- x$ ~. X& k& `0 Q *  ======== Miscellaneous Configuration ========
4 z( Y* j2 M7 \1 J* m8 j' x- ? */8 l. Z5 `. E; O4 \- X
9 T+ o& @9 k$ l" Q4 n& q8 K
/* set default diags mask */
2 E5 X$ K# Z  k4 R, o: C9 Cvar Diags = xdc.useModule('xdc.runtime.Diags');
& c; q8 r) f3 q5 I' X' vvar Defaults = xdc.useModule('xdc.runtime.Defaults');
, {: P1 ~% d- ^2 ^8 d) Z' |
8 U; ^% [9 n$ V0 l5 DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 M" J+ u6 q9 C% R) y! a2 WDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ X6 ^& k( q4 Y" z/ G" h4 B
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) e* D" a* j4 f- S4 c# a' O; ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  F0 X9 w( G4 A2 ]0 QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' ]0 M1 L3 @5 e* w1 ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 g) Q" m' c, S/ X% s( z4 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 W  v& s& A8 U) g- J9 uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ g2 }' a/ C" B; o! _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# Y, B* q% n* Z& iDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& U* D  k7 Y& l7 k6 FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& w( h+ f& Y+ S: w5 U0 o3 \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 u2 F  L9 e' }, d9 m. E2 `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% W) d! {" ~7 N- x% h0 @; S3 ~1 A" VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 Y: u- \2 u' d8 U) r/ h. F) N7 P5 Z% ^$ M$ @
/* override diags mask for selected modules */; f: R6 v. s! [) k5 T" N& m
xdc.useModule('xdc.runtime.Main');
' q2 @( V) s" }& `Diags.setMaskMeta(* d3 T- X/ p; ^" x
    "xdc.runtime.Main",6 C2 x; f- @1 b' U7 ]0 X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ A2 `$ @6 m! j3 o) h
    Diags.RUNTIME_ON: R) N; A2 X. O! w7 c- Z1 |! h& Y
);, d, _2 [0 E' b- c( H. Y
: p! u9 u9 I( i' w3 }
var Registry = xdc.useModule('xdc.runtime.Registry');9 b3 H; J3 i/ f! Y" u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( s9 Y0 a# ^7 q* ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. j3 u! x4 o+ N, w: [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 W8 W- T5 y* t! S, X, B3 m8 g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ Z4 X- d+ m9 J0 p$ h  P8 F9 L9 W0 I, }4 Z3 }5 w
/* create a logger instance */1 g: h  E- l+ i* q/ ]: D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 m, Z: A9 K  D6 w# ~8 V7 J+ T
var loggerBufP = new LoggerBuf.Params();( J' t! T( Q  C2 P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ l$ ]& s+ i, X1 X( b$ p3 d* l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 ?0 ~( R- l0 g; r

+ a6 q# k& _# {8 _# o9 k' j3 I" bvar appLogger = LoggerBuf.create(loggerBufP);) s: x. L+ Q" @/ k! q
appLogger.instance.name = "AppLog_Core1";
' C) M1 X/ s. z7 z6 GDefaults.common$.logger = appLogger;; ]* `( l1 C8 Q# N3 v1 ]
Memory.defaultHeapSize = 0x8192;   
1 g* l% J& g7 v1 sIdle.idleFxns[0] = "&LEDStatus";
  k& Y6 E. V4 V- JCache.initSize.l2Size = Cache.L2Size_32K;0 L  @- j; k3 B" Y  O  e; c6 P0 m* d9 F

5 I+ {4 c% @! 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 */& H$ a) `- E) f3 g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 H1 {2 k4 F% D) Y5 f# [var heapMemParams = new HeapMem.Params();
0 L+ A4 `" z: L' k. b5 ]! I7 QheapMemParams.size = 0x4000;- A/ {) Q. P9 y9 y+ t

/ y* u" X( S1 r+ qvar Memory = xdc.useModule('xdc.runtime.Memory');
% l' B1 t! n! H: V2 o; \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, m! U- @% S3 o! a' V; P, q5 S& ^/ \
我大约calloc  每次共计大小为5K*16bits,+ A) A, \; D1 O  Q+ w4 M: k
而默认配置才0x4000、需要改大。9 g2 |0 p5 Z+ L# d2 z/ r8 p" Y* g
9 S" {+ H- k, h5 k! ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- H# S, N& D9 U
Program.heap = 0;
/ O8 G% C* Q0 Y" R* E% N* R* }  bProgram.argSize = 100;  /* minimum size */
- [9 P5 ]* I# t$ `- k( S1 w5 [Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 09:22 , Processed in 0.046367 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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