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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 b) f; W9 @3 a4 L8 \/ C3 Z! Q3 m: Q% a7 D4 O3 o# |
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. n1 i9 m$ o+ a1 H/ w7 c* U
8 X$ q. A1 i' R
其他程序段。。。。。: R  O0 R! g- p/ c

, r) Z6 a$ V  q$ F* d   free(x_d);, f5 |5 Y0 B7 b% T6 i7 Y0 i

0 @1 T# j5 V$ r使用DSP侧单独调试功能,验证动态申请没有问题,+ S  p6 p$ l# F8 u% I0 C0 w3 n. f

$ ~: ]$ Q3 N& D3 O5 ^1 m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 R+ g; @; S. U: d

% m! X6 j- a8 X, W8 p" U5 K& E7 [! a0 I9 x. B; K' `6 z

6 y" v. A' ?- y, Y0 n  I' Z+ O+ F  e0 i
& K" \0 Z" F" m6 l8 q. v  n9 o* I& F3 V( R

2 a% T5 o# x3 @9 j. k6 e4 g: O7 A4 \0 d) p& Q

, ?' A- Y; e0 G6 V2 r; U1 |6 j; K* i5 Z, W' \# b! b
2 f- ~# O7 H( u& ?) Z1 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* \8 X% ^8 h' d+ `- L( `+ \: q' g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" D+ t* U; }7 Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 h2 C1 P& {3 _; Q2 m
9 f7 b6 I3 @. S, ?' k0 a
是不是需要在DSP.CFG中进行配置
6 t. S9 D7 P. \0 e: {  Z, Z我现在的配置为
" r9 {9 d* P1 ^( ]4 r1 W# `* N  x5 o7 v' q- p
/*
( u: W# N' L& R( l/ i2 D+ g1 G5 J *  ======== Operating System Configuration ========
: Q# g. H, U$ @% h *// \7 s, Q8 U/ n5 h, M

5 ?# F4 {" R/ a/* no rts heap */2 U" o( J7 m" t9 G2 L5 D
Program.heap = 0;
5 ~5 B/ P) \$ f" i: Z& U( vProgram.argSize = 100;  /* minimum size */
( u3 w4 [  j0 h! d" e! e! B4 zProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" p+ Q2 u, U) u$ G
' ^$ l: m8 L4 M( T/* create a default heap */4 [  r$ \( B) K, o' W8 f# X2 i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 E" N8 ]4 a$ J  L- k4 wvar heapMemParams = new HeapMem.Params();
* q2 T4 F* X/ s1 G8 W  `/ c6 x9 T& wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: E, w% J# l' E/ L& y6 ?' i, [4 U  C, R/ L  ?, A
var Memory = xdc.useModule('xdc.runtime.Memory');! o6 k) J. ]; O1 {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) ^6 Y2 d9 v, H2 x0 L( w7 j

% t" v' e# u" a: C1 k5 c6 Y9 V/* configure System module */3 l/ A, v/ [! G" z
var SysMin = xdc.useModule('xdc.runtime.SysMin');% `" L5 ?: m& N% U' M5 O5 O6 ]
SysMin.bufSize = 0x1000;
% l& b- {/ l& D2 Z) i9 e% D4 H" GSysMin.flushAtExit = false;! S% j3 s! F2 ?- E# E" }

" Q2 J' |9 S! [* Xvar System = xdc.useModule('xdc.runtime.System');0 _4 a1 t' M, K) V! @, A0 k' z+ D* f
System.SupportProxy = SysMin;
# @# g) _$ V$ t4 n5 m- t, o/ @: Z; {6 T' C; w
/* configure SysBios to use the lower half of Timer 1 */
4 ], S1 Q& R/ y. Y6 h+ ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 \  M* H( l6 s( I: `6 j# tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# A) a; I8 ?4 UTimer.timerSettings[1].master = true;
# Y! B% E/ ], l9 X3 ]Timer.defaultHalf = Timer.Half_LOWER;" f* b5 O4 q( L/ A0 D, j5 O& v7 Q
Clock.timerId = 1;
! r- d, H6 n2 M, Y$ q# v* F* ^# g5 T/ ^. L6 X4 i7 X: v
  j# c' P( k$ A, r) x
/*
, y! P& w  S" D5 _: g  D *  ======== Miscellaneous Configuration ========
; g# A4 q3 q0 b; g */
3 h7 y3 x2 p) a0 H4 f2 ]6 B' A8 o$ o% O# ~$ a  s9 V
/* set default diags mask */6 O+ l: {7 N  Q/ S- Y
var Diags = xdc.useModule('xdc.runtime.Diags');0 i+ k. ?# }" V. O
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 u5 R9 K+ t  N* t/ K/ c$ D3 o/ y3 Z3 e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* a+ Z+ _6 r9 O; e$ g- J& GDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& ?4 u- ?# k" q& H3 ~Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 V  L9 u, b1 b$ }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* @6 ]- |# G- K. G# ?  ]4 f- I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& V; P7 g& c3 y9 c3 `! WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 q& U/ O0 J$ ~" k6 e6 yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 T3 G1 z: A6 b2 `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 d  `' T" C& ^: |9 a+ a% v+ z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' Q: T  J2 U, @% Z  d+ r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! f0 R: H- c, {: E+ p& Z$ H) T2 a% z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- h4 ]1 S" ^  E9 X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 H- W3 M0 v. ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ A- [( c) v/ X: f+ d9 fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( B- ~, w5 b- `' G( t& ^7 V
0 L0 f$ J; s8 E/* override diags mask for selected modules */4 X4 P/ x- D% }8 a& ]
xdc.useModule('xdc.runtime.Main');
0 R1 B5 ~  O+ M) l  q5 L/ cDiags.setMaskMeta(1 x  m9 P. Y4 M3 }& T
    "xdc.runtime.Main",8 q: |& v0 U* n! {# D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; O+ r! I+ r& N! G  c$ m    Diags.RUNTIME_ON
% o+ [, x! [- q);. f  p( Y) x" E# v8 o  E* i
$ u. O  U" R7 k& R
var Registry = xdc.useModule('xdc.runtime.Registry');; k( d; C1 P' B+ t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) b! _# o0 M2 m. x5 e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
! Q# d/ E+ F6 O# f/ x3 y; fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 Z) }& M  C7 P7 S" V$ sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" t# ?! k1 |; }1 G' G, c" T- A6 ~2 n" U9 w8 O2 C
/* create a logger instance */# n4 [* U" K/ i* p2 C! z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 {( O9 Z7 v4 E$ `# G% d
var loggerBufP = new LoggerBuf.Params();* j# I. c+ Q: R; z1 }( R! z( c' O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 k& x+ K  e9 o; r& L" o3 ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;' y! S+ a8 M8 R0 u3 i  s6 ]9 R7 e* {
( k( F. v2 X9 _- F
var appLogger = LoggerBuf.create(loggerBufP);
* {+ m% l/ ?& R5 happLogger.instance.name = "AppLog_Core1";5 h  u3 k& i- Y0 A: c
Defaults.common$.logger = appLogger;
& t3 {3 H& h3 I; B! B- {; R; dMemory.defaultHeapSize = 0x8192;    # Z* p) O5 j- J0 r% m5 U1 T
Idle.idleFxns[0] = "&LEDStatus";& L! h, R6 o7 h' ^
Cache.initSize.l2Size = Cache.L2Size_32K;' C5 F1 M. u& ^1 C

2 I! W% M% }: U; b! A0 [
回复 支持 反对

使用道具 举报

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 */
% Z+ w3 T5 m- f1 _; qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ }: N. a7 d4 I7 P* H% Q9 e
var heapMemParams = new HeapMem.Params();
6 E9 V7 y6 d4 n* d6 a! |" @+ c+ TheapMemParams.size = 0x4000;
7 g! y) [  G1 x! n% p! M
" V+ H8 Y4 a! F; c6 y1 D* tvar Memory = xdc.useModule('xdc.runtime.Memory');. X7 m+ U3 g9 Y; A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, G& Z! f& F3 E
7 Z  C' w1 p  V  ^2 O我大约calloc  每次共计大小为5K*16bits,
# H/ L) B) ?+ V6 W8 w% m而默认配置才0x4000、需要改大。' K3 E  t& @, E% X# \* k% ^, |
' O, g- q8 h# m5 h1 U8 ]  z1 K2 D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 x" o! W( }) F1 @1 b9 ~( [
Program.heap = 0;- x8 t, @: ^. A  u
Program.argSize = 100;  /* minimum size */; Y8 U- ~- g- O( A3 o7 E
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-27 18:55 , Processed in 0.042518 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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